스프링

일상

인프런 Spring Boot 밋업 (with Josh Long) 후기

24년 9월 9일 월요일에 있던 인프런 스프링 부트 밋업을 다녀왔다. 인프런에서는 주기적으로 밋업을 진행 하는데 이번에는 무려 조쉬 롱의 강연이 주제였다.조쉬 롱은 자바 챔피언이라고 많이 알려져 있고 개인적으로는 유튜브에서 Bootiful SpringBoot 라는 이름으로 속성 스프링 프로젝트 만드는 영상으로 접했었다. 세계적으로 유명한 개발자이다 보니 현장에서 만나는것 만으로도 도움이 될 것 같았지만 영어를 못하는 나에게는 현장 강의는 너무 큰 허들이었다.그런데 이게 웬걸! 이번 밋업은 플리토를 이용해 실시간 번역을 지원해주었다.덕분에 현장에서 듣는데 큰 문제가 없었다. 강연 내용이번 강연의 주제는 Spring Boot 3.x와 Java 21이 출시 되면서 눈여겨 보면 좋을 기술들을 라이브 코딩으로 소..

BackEnd/Spring

톰캣은 정적 리소스를 어떻게 반환 할까? (feat. 스프링의 정적 리소스 반환)

최근 넥스트 스텝의 만들면서 배우는 Spring을 수강하고 있다.확실히 혼자 만들 때 보다 더 많은 것을 배운다고 느낀 게, 시작부터 톰캣을 냅다 구현해 버린다. 정확하겐 강의 자료로 구현해 주신 WAS를 이용해 클라이언트와  서블릿처럼 웹 요청/응답을 주고받는 기능을 구현한다. 요구사항으로 URL 별로 비지니스 로직이 담긴 서블릿을 호출하기도, 정적 리소스를 반환하기도 해야 했다. 해당 미션을 진행할 때 궁금한 점은 '기존 톰캣은 이용자가 구현한 서블릿과 정적 리소스 반환 중 어떤 것이 먼저 일어날까?'였다. 톰캣의 정적 리소스 반환톰캣의 우선순위를 파악하기 위해 간단한 실험을 진행했다.루트 경로의 서블릿을 등록 후, 존재하는 정적 리소스를 요청하면 어떻게 될까?루트 경로 서블릿이 존재할 때 정적 리소..

Project

[Project Winter/#9] Dependency Injection 기능 개발(IoC)

Project Winter DI 기능을 구현하며 드디어 계획했던 기능을 모두 구현했다. 스프링의 핵심이라고 할 수도 있는 IoC 역할을 구현해서 결합도도 낮추고 개발 편의성을 낮출 수 있도록 했다. @Autowired @Target({ElementType.METHOD, ElementType.FIELD, ElementType.CONSTRUCTOR}) @Retention(RetentionPolicy.RUNTIME) public @interface Autowired { } @Autowired 애노테이션을 개발해 의존성 주입을 해줄 생성자, 필드, 메서드에 애노테이션을 명시할 수 있도록 했다. 이 애노테이션이 붙은 생성자, 필드, 메서드는 백엔드 컨테이너에서 빈 주입을 해주면 된다. BeanFactory 수정 ..

Project

[Project Winter/#5] Controller 기능 구현

Project Winter 지난 #3-Contoller 기능 구현 중 문제에서 생긴 bean 관련 문제를 해결하고 다시 컨트롤러 기능을 구현했다. 원랜 인터페이스 기반 컨트롤러 기능만 일단 구현하려 했지만 bean 기능을 구현한 김에 애노테이션 기반 컨트롤러까지 진행했다. 컨트롤러 인터페이스 기반 컨트롤러 인터페이스 package com.project.winter.mvc.controller; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public interface Controller { String handleRequest(HttpServletRequest req, HttpServl..

Project

[Project-Winter/#4] 애노테이션 기반 싱글톤 빈 동적 생성

Project Winter 원래 애노테이션 기반으로 싱글톤 빈을 런타임시에 생성/관리 해주는 기능은 프로젝트 막바지에 개발하려 했다. 하지만 지난번 컨트롤러 기능 개발 중 컨트롤러 매핑 문제가 있었고, 문제 해결 방법으로 @Configuration 애노테이션이 붙은 설정 클래스에서 컨트롤러를 매핑해주기로 했다. 이 기능을 구현하기 위해 애노테이션 기반 빈 객체 생성 기능을 먼저 개발하였다. Annotation 우선 애노테이션은 위와 같이 다섯개를 미리 만들어 뒀다. @Component @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) public @interface Component { } 애플리케이션이 실행하면서 생성할 빈을 찾을 때, @..

Project

[Project-Winter/#3] Contoller 기능 구현 중 문제

Project Winter Controller 기능 개발 서버 기능을 구현 후 예정대로 Controller 기능 개발을 하던 중 문제를 만났다. Controller interface Controller { public Object handle(HttpServletRequest req, HttpServletResponse res); } 이렇게 컨트롤러 인터페이스를 만들고 이를 구현한 컨트롤러 클래스들을 실제 핸들러로 사용하고자 했다. HandlerMapping public interface HandlerMapping { void init(); Object findHandler(HttpServletRequest req); } HandlerMapping 을 구현한 클래스로 http method, uri 를 C..

Project

[Project Winter/#2] front-controller 패턴 적용하기(feat. DispatcherServlet)

Project Winter 본격적으로 프로젝트를 시작하기 앞서, Spring의 핵심인 DispatcherServlet을 생성하였다. DispatcherServlet은 WAS 에서 받은 모든 Http 요청을 받은 다음에, 각 uri가 매핑된 컨트롤러를 찾아 개발자가 정의한 작업 수행을 호출하는 역할을 한다. 진행중인 프로젝트에서도 동일하게 'DispathcerServlet'이라는 이름으로 Servlet을 등록해 모든 요청을 받게 하였다. DispatcherServlet @WebServlet("/") public class DispatcherServlet extends HttpServlet { private static final Logger log = LoggerFactory.getLogger(Dispat..

Project

[Project Winter/#1] 스프링 프레임워크 만들기

Project Winter 22년 4분기 즘, 백엔드 엔지니어로 전향 이직을 해야겠다는 마음을 먹고 스프링을 꾸준히 공부해왔다. 핑계가 섞여있긴 하지만 회사 업무와 병행하면서 부족한 부분을 채우려 하니 많은 공부를 하진 못했다. 애초에 지금 회사 취업 한것도 국비학원에서 연계로 취업한거라 실력이 좋은 상태로 취업한것이 아니었다. 그 상태에서 다른 취준생과 겨룰만한 실력까지 끌어 올리려니 공부할게 많다 느껴졌다. 아무튼 이렇게 공부를 하면서 스프링 동작 원리를 배우다 보니 단순히 보고 따라하기만 해선 한계가 있다 느껴졌고, 한번 스프링 프레임워크의 동작하는 방법을 따라 프레임워크를 만들어보고자 생각을 했다. 이름은 Project Winter. Winter 스프링 이름의 유래(나무위키)를 보면 '스프링'이라..

djawnstj
'스프링' 태그의 글 목록