HANARO 69

[Hanaro] 71일차 ~ 78일차 / 키오스크 프로젝트 완료 (회고)

약 2주간의 키오스크 프로젝트 끝!! 생각보다 연휴가 껴있어서 시간이 많지 않았다ㅠㅅㅠ 개발하면서 공부랑 정리도 병행하면서 잘 하고싶었는데 개발하기에 급급해가지고 정리를 많이 못해서 아쉽다.. 이번에 내가 맡은 부분은 키오스크 메인 기능과 프론트!! 메인이라 확실히 한 서비스 안에 여러 기능이 들어갔어야 해서 머리 쥐어짜내면서 개발했다. 예를들어 결제 전에 주문 상세를 확인하는 기능이라면 주문 상품의 이름, 가격, 각 상품 별 개수, 총 개수, 총 가격 이렇게 조인된 테이블을 찾아서 값을 한 번에 출력하거나, 주문 완료 기능이라면 주문 시간 업데이트, 주문 상태 업데이트, 구매 금액의 1% 적립, 주문 번호와 고객 적립금 출력 이렇게 한 기능안에 여러 기능이 들어가야 해서 기능 한 개를 짤때도 생각할게 ..

교육 (TIL)/Hanaro 2024.05.11

[개발Life] 새로운 프로젝트를 들어가며 요즘의 다짐들..

1. 에러를 마주쳐도 당황하지 않기!콘솔 에러메시지 윗부분부터 차근차근 읽어서 에러 유추하고 고쳐보기요건 그래도 이제 몸에 익었다 히히옛날에는 에러 메시지 잘 읽으려 하지 않았는데, 이제는 에러나도 콘솔창 천천히 읽고 어떤 에러인지 유추한다!에러 메시지 읽고 앗 어디가 문제겠다! 하고 고치면 정말 그 문제가 맞는 경우일 때 짜릿하다  2. 디버깅하기이건 조금 더 연습이 필요하다.에러를 유추하는 것도 좋지만 결국에는 디버깅으로 에러 해결하고 싶다!에러나면 디버깅을 통하여 에러 고쳐보기  3. 커뮤니케이션 능력 기르기언제나 코딩 잘하고 커뮤니케이션 잘하는 사람을 만나긴 힘들다.우선 나부터 협업 잘하는 개발자가 되고 싶다.그리고 항상 겸손하기정말 타고난 사람이 아닌 이상 주니어 시절에는 다들 비슷하다고 생각하..

Life 2024.04.25

[Hanaro] 69일차 / Spring Boot (Security), 시큐어 코딩 (시간 및 상태, 에러 처리)

시큐어 코딩03 시간 및 상태검사 시점과 사용 시점 (TOCTOU)자원을 사용하는 시점과 검사하는 시점이 다르기 때문에 존재하던 자원이 사라지는 등 자원의 상태가 변화는 경우가 발생공유자원에 여러 프로세스가 접근하여 사용할 경우 동기화 구문을 사용하여 한번에 하나의 프로세스만 접근하도록 하고, 성능에 미치는 영향을 최소화하기 위해 임계코드 주변만 동기화 구문 사용예시public void run() { // 멀티쓰레드 환경에서 synchronized를 사용하여 동시에 접근할 수 없도록 사용해야한다. synchronized(SYNC) { try { if (manageType.equals("READ")) { File f = new File("Test_367.txt");...코드생략...public s..

교육 (TIL)/Hanaro 2024.04.25

[Hanaro] 68일차 / 시큐어 코딩 (보안 기능), Spring Boot(Security)

시큐어 코딩02 보안기능적절한 인증 없는 중요기능 허용적절한 인증과정없이 중요정보를 열람 또는 변경하지 않도록 해야한다.클라이언트의 보안 검사를 우회하여 서버에 접근하지 못하도록 설계하고 중요한 정보가 있는 페이지는 재인증을 적용한다.검증된 라이브러리나 프레임워크(OpenSSL, ESAPI)를 사용한다.예시// 1. 로그인한 사용자를 불러온다.String userId = (String) session.getAttribute("userId");String passwd = request.getParameter("oldUserPw");// 2. 회원정보를 실제 수정하는 사용자와 로그인 사용자와 동일한지 확인한다.String requestUser = memberModel.getUserId();if (userId..

교육 (TIL)/Hanaro 2024.04.25

[Hanaro] 67일차 / 시큐어 코딩 (입력데이터 검증), Spring Boot (네비게이션 바, 페이징)

시큐어 코딩 01 입력데이터 검증 및 표현 SQL 삽입 DB 입력 데이터에 대한 유효성 검증을 해야한다. 예시 JDBC String gubun = request.getParameter("gubun"); // 사용자 입력 값 변수를 ? 문자로 바인딩 변수 사용 String sql = "SELECT * FROM board WHERE b_gubun = ?"; Connection con = db.getConnection(); // PreparedStatement 사용 PreparedStatement pstmt = con.prepareStatement(sql); pstmt.setString(1, gubun); ResultSet rs = pstmt.executeQuery(); Hibernate String name..

교육 (TIL)/Hanaro 2024.04.23

[Hanaro] 63일차 / Spring Boot (Repository - Service - Controller)

JPA (Repository - Service - Controller) Repository - Service - Controller 순으로 JPA 작성하기 Repository 인터페이스 생성 어노테이션 주입 @Repository JpaRepository 상속받기 (extends) 기본 함수 findAll findById save (update, insert) delete 사용자 생성 함수 사용자가 조합하여 생성 가능 예시 List findAllByReplyBoardIdx(Long replyBoradIdx); void deleteById(Long replyIdx); Service 클래스 생성 어노테이션 주입 @Service @RequiredArgsConstructor Repository 생성자 주입 fin..

교육 (TIL)/Hanaro 2024.04.18

[Hanaro] 62일차 / REST API(CRUD), JSP

CRUD 기능 ArrayList → JPA (MySQL) 및 Model → REST API 변환하기 이전 Model 사용 Controller @Controller @RequiredArgsConstructor public class ProductController { final ProductRepository productRepository; // 전체 상품 출력 @GetMapping("/") public String main(Model model) { List productList = productRepository.findAll(); model.addAttribute("productList", productList); return "productList"; } // 상품 추가 폼 출력 @GetMappi..

교육 (TIL)/Hanaro 2024.04.18

[Hanaro] 61일차 / Spring Boot (Test, Scheduler)

테스트 주도 개발 (Test Driven Development, TDD) 테스트 관련 어노테이션 및 클래스 @WebMvcTest @Controller, @RestController가 설정된 컨트롤 클래스를 테스트한다. @Service, @Repository에는 사용할 수 없다. MockMvc 웹 API를 테스트할 때 가상의 HTTP 요청을 만들어주는 클래스이다. @Disabled 테스트 메소드를 비활성화 시키는 어노테이션 @BeforeAll 테스트 클래스 기준으로 테스트 메소드들이 실행되기 전에 한번만 실행 @AfterAll 테스트 클래스 기준으로 테스트 메소드들이 실행된 후에 한번만 실행 예로 리소스 정리 같은 코드 작성 @BeforeEach 각 테스트 메소드가 실행되기 전에 매번 실행 @AfterEa..

교육 (TIL)/Hanaro 2024.04.13