전체 글
[우아한테크코스 5기] 장바구니 1단계 학습
들어가며 GitHub 저장소 구현 기능들 궁금한 것 코드 리뷰 후기 📆 기간 : 2023.04.25 ~ 2023.04.27 들어가며 장바구니 미션을 연어와 진행하게 되었다. 연어는 인호형 군대 후임이라서 알게 되었었는데 그래서 조금 더 빠르게 친해질 수 있었던 것 같다. 연어는 인텔리제이도 잘 다루었고 자바, 스프링도 잘 다루었다. 연어를 보면서 나도 인텔리제이 단축키를 활용해서 더 잘 해야겠다고 결심하게 되었다. 호호. 모르는 것에 대해 물어볼 때 마다 답을 잘해주어서 고마웠다~그리고 재미있었다. GitHub 저장소 장바구니 1단계 PR 깃허브 주소 구현 기능 목록 상품 목록 페이지 연동 html 파일을 수정하여 상품 목록 페이지를 연동하였다. 나는 html, js에 관한 지식이 없었다. 연어 덕분에 ..
[Spring] Argument Resolver 내부 구경 하기
사용자가 컨트롤러의 메서드 인자값으로 임의의 값을 전달하려할 때 사용된다. Argument Resolver를 Controller 단에서 사용하면 중복 코드(HttpSession에서 세션 로드, HttpServletRequest에서 요청 url 및 ip 정보 로드 등)를 깔끔하게 처리할 수 있다. RequestMapping에 대한 매칭 (RequestMappingHandlerAdapter가 수행) 이후 Interceptor 처리되고 그 후에 Argument Resolver가 파라메터를 처리한다. 언제 사용하면 좋을까? 내가 생각한 몇가지 예시는 다음과 같다. 1. 프로덕션 코드에서 코드 구조를 드러내기 싫을 때 Ex) 암호화 -> 복호화 하는 숨기고싶은 구조가 있을 때 2. 파라메터로 받는 인자를 다르게 ..
[Spring] Dispatcher Servlet이란 ? & 미션 에서 찾아보기
dispatcher servlet 이란 front controller로 들어오는 요청에 대해 적절하게 판단하여 위임해 주는 역할을 하는 서블릿이다. 공통적인 작업을 처리 한 후에 해당 요청을 처리해야하는 컨트롤러에게 위임해준다. 장점 많은 서블릿들의 URL매핑을 위해 설정파일에 등록을 시켰어야 했지만, dispatcher servlet이 모든 요청을 처리해주고 공통 작업을 진행해줌으로써 등록없이 편리하게 사용가능하다. 컨트롤러에 구현이 되있다면 dispatcher servlet이 알아서 해준다. 디스패처 서블릿이 클라이언트의 요청을 받는다. 요청을 위임할 컨트롤러를 handler mapping이 찾는다. 요청을 컨트롤러로 위임해줄 handler adapter를 찾는다. handler adapter가 co..
[Spring] Servlet 이란 ?
서블릿이란 클라이언트의 요청을 처리하고, 그 결과를 반환하는 Servlet 클래스의 구현 규칙을 지킨 자바 웹 프로그래밍 기술 서블릿은 자바로 구현 된 *CGI(Common Gateway Interface 서버와 애플리케이션 간에 데이터를 주고 받는 방식 또는 컨벤션) 서블릿은 자바로 구현된 CGI라고 하기에는 규약과 프로그램은 같게 비교해서 오류가 있다. 그냥 CGI 방식이 개선된 자바로 구현된 것이 서블릿 이라고 이해하면 좋을 것 같다. 동적인 처리를 위해 CGI를 만들었다. CGI는 문제가 있었는데 요청 시 마다 프로세스를 만든다. 이 프로세스는 상대적으로 만드는데 시간과 메모리가 많이드니까 쓰레드로 바꾼다. 요청 시마다 쓰레드가 다르다면 구현체가 각각 하나씩 생기는데 이것을 싱글톤 패턴으로 만든다..
[우아한테크코스 5기] 웹 자동차 경주 2단계 학습 로그
웹 자동차 경주 1단계 GitHub 저장소 STEP 2 목표 변경 사항 개선할 점 배운 점 궁금한 점 나가며 📆 기간 : 2023.04.14 ~ 2023.04.24 들어가며 이번 2 단계에서는 이력조회 api, 웹 애플리케이션과 콘솔 간 코드 중복 제거를 진행하였다. 코드의 이식성을 생각하며 작성을 하다 보니 범용적인 코드 작성 법을 알게 되었던 것 같다. 콘솔로 만들었던 코드가 리팩토링을 통해 웹과 같은 비즈니스 로직을 통해 진행할 수 있었는데 재미있었다. GitHub 저장소 웹 자동차 경주 2차 PR 깃허브 주소 STEP 2 목표 추가된 요구사항 이력 조회 api 추가 콘솔 출력 방식 수정 중복 코드 제거 api 추가 및 리팩토링을 통해 콘솔과 웹이 하나의 비즈니스 로직으로 작동하도록 한다. 변경 ..
[Spring] 어떤 객체를 빈으로 등록해야 할까 ?
모든 객체를 스프링 빈으로 등록해도 괜찮은가 ? 애플리케이션의 모든 객체를 스프링 컨테이너가 관리할 필요는 없다. 그럼 어떤 객체를 스프링 빈으로 등록해야하나 ? 모든 객체를 스프링 빈으로 등록할 경우에는 메모리 사용량이 많아짐에 따라 애플리케이션의 성능에 문제가 생길 수 있다. 사실 완벽하게 생각하지는 못했지만 나의 생각은 이렇다. Thread-safe 가아니면 스프링 빈을 등록할 필요하다. 예를들어 user라는 객체는 애플리케이션 실행 중 계속해서 생성 될 수 있는데 spring bean을 등록해서 사용하면 디폴트가 싱글턴이기에 새로운 객체가 생성되지 않을 수 있다. → 빈스코프를 변경해서 사용하면 어떨까 ? (가능할 것 같기도 하다) 중간에 user라는 객체가 생성 되었다가 사용이 끝나는 객체가 존..
[Spring] Bean 이란 ?
들어가며 스프링을 사용하면서 기존 자바보다 객체 생성, 조립, 사용을 훨씬 편하게 해준다는 것을 알았고 이에 기본적으로 Bean이라는 개념이 사용된다는 것을 알았다. 하지만 Bean이 무엇인지에 대한 의문점이 있어 정리해보았다. 스프링 빈 이란 ? 빈이란 스프링 IOC 컨테이너 가 관리하는 객체이다. 빈은 Spring IoC 컨테이너에 의해 인스턴스화, 조립 및 관리되는 객체이다. 인스턴스화 된 빈은 @Autowired를 통해 의존성 주입을 받을 수 있다. 인텔리제이에서 옆에 콩처럼 표시가 되어있다면 빈등록이 되었다는 것을 의미한다. @Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE}) @Retention(RetentionPolicy.RUNTIME) @..
[우아한테크코스 5기] 웹 자동차 경주 1단계 학습 로그
들어가며 GitHub 저장소 구현 기능들 궁금한 것 코드 리뷰 후기 📆 기간 : 2023.04.11 ~ 2023.04.13 들어가며 레벨 2 들어와서 처음 하게된 미션이라 떨렸다. 이번에는 레벨1에 구현한 자동차 경주 코드를 웹으로 구현하는 과정이였다. 이번 미션은 민트와 함께 하였다. 같은학교 같은학번 친구였기에 친했다. 그래서 정말 재미있게 할 수 있었다. 서로 스프링 프레임워크에 대해 학습하면서 미션을 진행하였다. 친한 사람과 하게 되니 재미가 두배였다. 같이 미션 뿐 아니라 학습테스트 도 진행하면서 하였다. 여럿이서 학습을 하니 이해도 잘 갔고 잘 진행되었던 것 같다. 만족스러웠다. GitHub 저장소 웹 자동차 경주 1단계 PR 깃허브 주소 구현 기능 목록 웹 요청 / 응답 구현 이번 미션에서는..
[Spring] 테스트 DB Failed to load ApplicationContext 에러
문제 스프링 미션을 진행하던 중 단위 테스트는 잘 수행되었으나 통합테스트가 에러가 났다. java.lang.IllegalStateException: Failed to load ApplicationContext Failed to load ApplicationContext java.lang.IllegalStateException: Failed to load ApplicationContext at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:98) ~~~ Caused by: org.springframework.bean..
[Architecture] Layered Architecture
들어가며 스프링을 사용함에 있어서 Layered Architecture 사용하게 되었는데 이게 어떤 것이고 왜 쓰는지에 궁금증이 생겼다. Layered Architecture 소프트웨어 개발에 일반적으로 사용되는 아키텍처이다. 계층형 아키텍처라고도 하는데, 계층의 숫자에 따라 N-tier Architecture라고도 할 수 있다. 💡 아키텍처란 ? 시스템의 구조, 동작을 정의하는 개념적인 모형이다. 레이어드 아키텍처는 계층형을 통해서 시스템의 구조, 동작을 정의한다. 계층형 아키텍처는 수직적인 구조로 여러 계층을 각각의 역할에 따라 나눌 수 있다. 이렇게 나눔으로써 각각의 계층은 자신에게 맞는 역할만 수행하게 되고 이에 따라 유지보수와 테스트하기가 용이하다. 계층이 어떻게 나뉘는가 ? 계층자체의 역할, ..