분류 전체보기 59

자바 기본서를 다시 읽다. 1-JVM의 메모리 사용 영역

Java 기본서를 다시 읽으려고 한다. 이펙티브 자바를 공부하기 전 빠르게 완독하려 핀 책이었으나, 기본기가 꽤나 듬성듬성 비어있더랬다. 지식의 구멍을 메우고 기초를 탄탄히 하자는 마음에서 다시 자바 기본서를 공부해보려 한다. 내가 선택한 책은 '이것이 자바다(신용권)'의 책이다. 기존에 가지고 있던 기본서는 'Introduction to Java Programming(Liang)'이라는 원서였는데 자바 8의 함수형 인터페이스와 스트림 등이 반영되어있지 않아 이 책을 선택하게 되었다. 자바 8 관련 내용을 제외하고는 헷갈렸던 부분을 빠르게 짚고 넘어가려고 한다. 그 첫번째로 JVM과 메모리 사용 영역에 대해 알아보자. 자바는 운영체제에서 바로 실행될 수 없는 언어이다. 자바 프로그램은 완전한 기계어가 아..

Study/Java 2022.03.10

예약 시스템 개발하기 04. JPA 쿼리 메소드와 JPQL , CharacterEncodingFilter

예약 시스템에서 사용자가 화면에서 수업을 예약/ 취소 할 경우 데이터를 핸들링하는 로직을 작성해보았다. 테스트 코드까지 완성시키는데 꽤 오래 걸렸다. 사용자가 예약 가능한 수업을 리스트를 조회하는 메소드를 테스트하는 로직이다. 멤버십 아이디에 대해서는 PathVariable로 받고 있기 때문에 기본 api 경로인 /reservation뒤에 1로 셋팅하고, 다른 유저아이디나 센터아이디, 기준일자에 대해서는 RequestParameter로 받고 있기 때문에 mockMvc의 Param으로 셋팅한다. @Test public void getCourseList() throws Exception{ MultiValueMap param = new LinkedMultiValueMap(); param.add("userId"..

[스프링 웹 MVC 활용] 03. URI 패턴 및 요청 매개변수(단순 타입)

핸들러 메소드에서 인자로 받는 클래스들에 대해 조금 더 구체적으로 알아보자. 그 첫번째는 URI 패턴의 일부를 핸들러 메소드의 인자로 받는 방법이다. I. URI 패턴 - @PathVariable, @MatrixVariable로 클라이언트가 요청을 보낼 때 uri에 매개변수를 넣어서 요청할 수 있다. // # 1. testCode @RunWith(SpringRunner.class) @WebMvcTest public class SampleControllerTest { @Autowired MockMvc mockMvc; @Test public void helloTest() throws Exception { // 테스트를 할 때는 꼭 void형식으로 해줘야 한다. mockMvc.perform(get("/even..

Study/Spring 2022.03.01

[스프링 웹 MVC 활용] 02. 핸들러 메소드의 Argument와 Return 타입

1. 메소드 Argument와 Return Type : 주로 요청 그 자체 또는 요청에 들어있는 정보를 받아오는데 사용한다. https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#mvc-ann-arguments Web on Servlet Stack Spring Web MVC is the original web framework built on the Servlet API and has been included in the Spring Framework from the very beginning. The formal name, “Spring Web MVC,” comes from the name of its source mo..

Study/Spring 2022.03.01

[스프링 웹 MVC 활용] 01. HTTP Request 맵핑하기

스프링 MVC 의 핵심 기술이었던 DispatcherServlet이 핸들러를 찾아서 요청들을 수행하는지 실제로 활용을 해보자. I. HTTP Method로 맵핑하기 첫번째로 HttpRequest를 처리하는 Handler를 작성하는 방법이다. Handler는 기본적으로 Controller Class 안에 메소드들이라고 생각하면 쉽다. 그리고 그 메소드에 어떤 HttpReqeust를 처리할 것인지, 어떤 값을 리턴해줄 것인지(뷰 모델인지, ResponseBody인지) 등을 설정해주면 DispatcherServlet의 HandlerAdaptor가 이를 처리해 줄 것이다. @Controller public class SampleController { @RequestMapping("/hello") /* * #1...

Study/Spring 2022.03.01

[스프링 웹 MVC 설정] 01. @EnableWebMvc와 WebMvcConfigurer

스프링에서 기본적인 전략은 DispatcherServlet.properties에서 제공해주지만, 개발자가 직접 스프링 MVC의 구성요소를 Bean으로 등록할 수 있다. 아래의 예시는 row-level에서 직접 Bean을 등록해주는 방식으로 실무에서 이렇게 사용하는 경우는 없다고 보면된다. 단지 원리를 익히자면 그런 것이다 라고 보고 넘어가면 되는 예시코드이다. // #Controller코드 @Controller public class HelloController { @Autowired HelloService helloService; /* * /hello/1?name=gayoung&age=25 * @param id * @param name * @return * */ @GetMapping("/hello/{i..

Study/Spring 2022.03.01

[스프링 웹 MVC 동작원리] Servlet과 DispatcherServlet의 동작원리

I. Servelet 소개 1. Servlet 이란? - 자바 엔터프라이즈 에디션에서 웹 애플리케이션 개발을 위한 스펙과 API를 제공하는데, 그 중 가장 중요한 것이 HttpServlet이다. - 요청마다 프로세스를 생성하는 것이 아니라 한 프로세스 내에 자원을 공유하는 쓰레드로 요청을 처리함. > 이식성이 좋다. 2. Servlet 엔진 또는 서블릿 컨테이너(톰캣, 제티 등) - 세션관리 - 네트워크 서비스 - MIME 기반 메세지 인코딩, 디코등 - 서블릿 생명주기 관리 3. Servlet의 생명주기 - init: 서블릿 컨테이너가 서블릿 인스턴스를 초기화 - service: 서블릿 초기화 이후에는 모든 요청이 쓰레드 단위로 처리되고, 인스턴스의 service()메소드가 호출된다. :이 안에서 HT..

Study/Spring 2022.03.01

스프링 핵심기술 06. AOP

이제 스프링 AOP에 대해 알아보자. AOP란 Aspect-Oriented Programming으로 흩어진 Aspect들을 모듈화하는 프로그래밍 기법을 말한다. 자바에서는 AspectJ나 스프링AOP를 통해 구현하며, 컴파일시점 / 로드타임 / 런타임에 AOP를 적용시킬 수 있다. AOP 관련 개념이 잘 설명된 포스팅을 좀 찾아보았다. https://tecoble.techcourse.co.kr/post/2021-06-25-aop-transaction/ AOP 입문자를 위한 개념 이해하기 이 글은 AOP 개념이 생소한 입문자들을 위한 포스팅입니다. 1. OOP의 한계 image… tecoble.techcourse.co.kr https://atoz-develop.tistory.com/entry/Spring-..

Study/Spring 2022.02.13

스프링 핵심기술 05. 추상화

스프링이 제공하는 추상화 기술에 대해 알아보자. 순서는 다음과 같다. Resource 추상화 Validation 추상화 Data Binding 추상화 1. Resource 추상화 Resource 추상화란 무엇인가? java.net.URL이라는 클래스를 Spring.core.io.resource라는 클래스로 감싸서 Low-level에 있는 리소스에 접근하는 기능이다. (java.net.URL을 classpath기준으로가져오기 위해서) @Override public void run(ApplicationArguments args) throws Exception { Resource resource = resourceLoader.getResource("classpath:test.txt"); // #1. Resou..

Study/Spring 2022.02.13

스프링 핵심기술 04. ApplicationContext가 상속받는 인터페이스들

ApplicationContext는 Bean Factory의 역할 + Spring의 여러가지 기능들을 담당하고 있다. 이 ApplicationContext는 다음과 같은 인터페이스들을 상속받고 있는데 ApplicationEventPublisher EnvironmentCapable HierarchicalBeanFactory ListableBeanFactory MessageSource ResourceLoader ResourcePatternResolver 이들 중 가장 먼저 살펴볼 것은, EnvionmentCapable 인터페이스이다. 이 Environment가 제공하는 기능은 크게 프로파일과 프로퍼티로 나눌 수 있는데, 먼저 프로파일에 대해 알아보자. 1. 프로파일 인터페이스 이 프로파일은 개발/ 운영서버가..

Study/Spring 2022.02.06