본문 바로가기

우아한테크코스/미션 정리

(11)
Level 4. MVC 프레임워크 구현하기 - 정리 서블릿이란 Java로 HTTP 요청 및 응답을 처리하기 위한 표준이다. Jakarta Servlet defines a server-side API for handling HTTP requests and responses. 서블릿 표준은 인터페이스로 제공되며 이 구현은 서블릿 컨테이너 구현체인 Tomcat, Jetty, Undertow가 제공한다. Web Server vs WAS 짧게 말하자면, Web Server는 주로 정적인 컨텐츠를 처리하고, WAS는 주로 요청에 따라 응갑이 달라지는 동적인 컨텐츠를 처리한다. WAS는 일부 웹서버의 기능과 웹 컨테이너로 함께 구성된다. 앞 단의 웹 서버는 요청을 받아 웹 컨테이너로 넘겨주며, 웹 컨테이너는 이를 처리 후 다시 웹 서버로 전달한다. 자바에서는 이를 서..
Level 4. HTTP 서버 구현하기 - 정리 1, 2 단계 - HTTP 서버 구현하기 & 리팩터링 HTTP HTTP 메시지는 ASCII로 인코딩된 텍스트 정보이며 여러 줄로 되어 있음 HTTP 프로토콜 초기 버전과 HTTP/1.1에서는 클라이언트와 서버 사이의 연결을 통해 공개적으로 전달되었음 사람이 읽을 수 있었던 메시지는 HTTP/2에서는 최적화와 성능 향상을 위해 HTTP 프레임으로 나누어짐 HTTP 메시지는 주로 소프트웨어, 브라우저, 프록시, 또는 웹 서버가 작성 HTTP Request 구조 요청 메시지는 다음과 같은 메시지로 날아온다. GET /index.html HTTP/1.1 Host: localhost:8080 Connection: keep-alive Accept: */* 먼저 내가 미션에서 만든 HTTP Request 객체의 구조..
Level2. atdd-subway-fare 정리 2021-06-16글 요금 정책 로그인 사용자와 비로그인 사용자를 구별하여 요금 정책을 적용 PathController에서는 토큰이 없어도 예외가 아니었고 MemberController에서는 토큰이 없으면 예외였기에 Resolver에서는 각각에 맞는 처리를 해주어야 했음 맨 처음 페어랑 기능만 돌아가게 구현했을 때는 기존에 있는 로그인된 사용자에 대한 인가 과정을 거치는 Resolver를 재사용하도록 구현 이러기 위해서는 이 각각에 맞는 처리를 일간 Controller로 옮겨야 했음 AuthenticationPrincipalArgumentResolver @Override public Object resolveArgument(MethodParameter parameter, ModelAndViewContai..
Level2. atdd-subway-path 정리 2021-06-11글 STEP1, 2 JwtTokenProvider jwt 토큰 생성, 토큰 검증, 토큰에서 인증 정보 추출하는 유틸 클래스 AuthorizationExtractor HTTP의 Authorization Header에서 Bearer 타입인 경우 Access Token을 추출하는 유틸 클래스 AuthenticationPrincipalConfig @Configuration public class AuthenticationPrincipalConfig implements WebMvcConfigurer { private final AuthService authService; public AuthenticationPrincipalConfig(AuthService authService) { this.a..
Level2. atdd-subway-map 정리 2021-06-11글 중복되는 테스트 메서드 중복되는 테스트 메서드는 추출하자 테스트코드도 유지보수의 대상이며 하나의 문서이기 때문에 가독성을 고려하자 private ExtractableResponse addSection(String content) { return RestAssured.given().log().all() .body(content) .contentType(MediaType.APPLICATION_JSON_VALUE) .when() .post("/lines/{id}/sections", 1L) .then().log().all() .extract(); } 예외 처리는 Service에서 DAO에서 예외를 체크해주고 있었음 DAO는 말그대로 DB에 어세스하는 역할만 할 뿐 이 결과에 대한 예외는 서..
Level2. jwp-chess 정리 2021-06-09글 @ControllerAdvice 전역 예외를 처리하는데 사용 정리 @ControllerAdvice, @RestControllerAdvice REST API REST API 설계 방법을 찾아보고 고민하여 반영 정리 REST API 디자인 Profile 실제 애플리케이션에서 사용하는 DB는 Mysql 그대로 냅두고 테스트에서는 h2를 사용하여 h2 의 장점을 극대화해서 사용하도록 리팩또 테스트 DB를 따로 설정하기 위해 열심히 찾아보다가 application-properties를 활용하는 방안 학습 처음에는 application-{환경}-properties로 각각 파일을 만들어주었음 아래와 같은 리뷰를 받고 test.resource에 application-properties를 만들어줌 ..
[코드리뷰 정리] Level 1. 체스 미션 - Service Layer, DAO와 Repository 2021-04-10글 MVC와 Service 이번 미션에서 DB를 적용하면서 MVC 패턴에 추가로 Service 레이어를 도입하였다. 또한 DAO와 데이터 전달을 위한 DTO를 처음 사용했는데, DTO를 정리하고 DAO에 대해서도 새롭게 배운 부분이 많아 정리 ✍️ 휴의 코멘트에 답변을 달다가 나의 코멘트 내용을 정정해주면서 같이 주신 참고자료가 있는데, 서비스 계층과 비즈니스 로직이라는 개념이 다르다는 것을 제대로 인지하지 못하고 있었던 것 같다. 때문에 휴가 주신 MVC 패턴과 Service 레이어에 관한 글을 읽고 간단히 정리해본다. 각 계층에 대한 개념은 조금씩 상이하니 일단 블로그 글은 서비스 계측과 비즈니스 로직에 대한 참고 정도만 한 수준에서 정리하고 다음 레벨에서 상세히 잡아가는 것이 좋겠..
[코드리뷰 정리] Level 1. 체스 미션 - JDBC 2021-04-10글 JDBC (Java DataBase Connectivity) JDBC는 DB에 접근할 수 있도록 Java에서 제공하는 API로, 모든 Java의 Data Access 기술의 근간이다. 모든 Persistence Framework는 내부적으로 JDBC API를 이용한다. JDBC를 통한 DB 연결 1. 드라이버 로드 try { Class.forName("com.mysql.cj.jdbc.Driver"); } catch (ClassNotFoundException e) { System.err.println(" !! JDBC Driver load 오류: " + e.getMessage()); e.printStackTrace(); } 제공되는 클래스를 인스턴스화해서 내부적으로 저장해 메모리에 드..