
스프링부트(Spring Boot) 프로젝트를 새로 세팅하고, Application 클래스를 실행해보면 8080 포트에서 서버가 실행되기를 기대하게 됩니다. 별다른 에러 없이 애플리케이션이 곧바로 종료되는 경험을 한 적이 있으신가요? 이번 글에서는 Spring Boot가 자동으로 종료되는 이유와 톰캣(Tomcat) 서버가 JVM을 유지시키는 메커니즘, 그리고 Non-Daemon Thread의 역할에 대해 간단하게 정리해보겠습니다. 1. Spring Boot 애플리케이션이 곧바로 종료되는 이유는?Spring Boot는 실행 시 프로젝트에 포함된 의존성 등을 바탕으로 애플리케이션이 Web 환경인지, Non-Web 환경인지 자동으로 판단합니다. 예를 들어 다음과 같은 경우에는 Spring Boot는 Web 환경..

프록시 객체는 실제 객체를 대신하여 요청을 처리하는 객체입니다. 실제 객체와 같은 인터페이스를 구현하여 실제 객체를 대신하여 요청을 처리할 수 있습니다. 프록시 객체는 실제 객체를 보호하거나, 실제 객체의 기능을 확장하거나, 실제 객체의 로직을 변경하는 데 사용할 수 있습니다. 프록시 객체를 사용하는 이유 프록시 객체를 사용하는 이유는 다음과 같습니다. 실제 객체 보호 프록시 객체는 실제 객체를 대신하여 요청을 처리할 수 있습니다. 따라서 실제 객체가 직접 요청을 받지 않으므로 실제 객체를 보호할 수 있습니다. 실제 객체의 기능 확장 프록시 객체는 실제 객체의 기능을 확장할 수 있습니다. 예를 들어, 프록시 객체는 실제 객체의 요청을 기록하거나, 실제 객체의 요청을 캐싱할 수 있습니다. 실제 객체의 로직..
개발하면서 API 응답 값으로 Map으로 넘겨주거나 DTO 클래스나, ErrorResponse등 클래스를 넘겨주는 방식으로 사용합니다. 하지만 알기로는 응답 값이든 데이터를 주고받는 데 있어서 대부분 Map 의 사용을 지양하라고 합니다. 왜 그런지 간단하게 알아보겠습니다. Map의 사용을 지양하는 이유가 무엇일까요? Map을 사용할 때의 단점은 다음과 같습니다. 컴파일 에러를 유발할 수 없음 key 또는 value가 null이면 Map의 해당 필드 자체를 key로 가져가지 않음. String 텍스트를 Key로 사용함 가독성이 떨어짐 타입캐스팅 비용이 발생함 불변성을 확보할 수 없음 1. 컴파일 에러를 유발할 수 없음 Map의 Value는 Object 타입이다. 그리고 Object 클래스는 최상위 클래스..
웹 애플리케이션에서 컨트롤러를 테스트할 때, 서블릿 컨테이너를 모킹하기 위해서는 @WebMvcTest를 사용하거나 @AutoConfigureMockMvc를 사용하게 되는데 이 어노테이션들에 대해 알아보겠습니다. @WebMvcTest 일반적으로 사용하는 MVC 테스트용 어노테이션입니다. 해당 어노테이션을 명시하고 아래와 같이 MockMvc를 @Autowired하면 해당 객체를 통해 MVC테스트가 가능합니다. 이 어노테이션을 사용하면 MVC 관련 설정인 @Controller, @ControllerAdvice, @JsonComponent와 Filter, WebMvcConfigurer, HandlerMethodArgumentResolver만 로드되기 때문에, 실제 구동되는 애플리케이션과 똑같이 컨텍스트를 로드..
Spring 을 개발하다보면 가끔 VO 혹은 DTO를 사용할 적이 있습니다. 겉보기엔 둘이 같아보이기도 한 둘을 어떠한 목적을 갖고 사용하는지에 대해 알아보려고 합니다. VO (Value Object) 값을 가지는 객체 데이터 불변이어야 하고, 저장된 값을 불러와야하는 경우에 사용합니다. 값이 같다면 동일한 객체 같은 객체인지 판단하기 위해 각 속성들의 값을 비교함 equals() 메서드와 hashcode() 메서드를 오버라이드해서 객체 비교를 구현합니다. 예를 들어, 서울의 지역번호를 저장할 때 서울의 지역번호는 상식적으로 '02' 이며, 이 번호는 변하는 값이 아닌 고정된 값입니다. 그렇기 때문에 VO로 저장하고 Getter로 호출하여 사용합니다. DTO (Data Transfer Object) ..

https://start.spring.io 에서 Packaging을 할 때 Jar와 War의 차이점이 궁금해졌다. 우선 Packaging이 뭘까? .jar 와 .war 모두 아카이브 파일이고 , 어플리케이션을 배포하고 어느 환경에서나 구동시킬 수 있도록 관련 파일들을 하나로 묶어주는 것이라고 한다. JAR ? JAVA 어플리케이션이 동작할 수 있도록 자바 프로젝트를 압축한 파일 내장톰캣을 사용 webapp경로 사용 안함 JRE 만 있어도 실행 가능함 WAR ? Servlet / JSP 컨테이너에 배치할 수 있는 웹 어플리케이션 압축파일 포맷 별도의 웹서버 또는 웹 컨테이너 필요 (톰캣을 별도로 설치) 사전 정의된 구조를 사용한다(WEB-INF, META-INF) 간단하게 이정도 차이점이 있겠다 JAR, ..
- Total
- Today
- Yesterday
- 회고록
- 스위치
- .NET
- 초보
- 계층
- 삽질
- 3Way Handshake
- Spring Boot
- 라우팅
- 프로토콜
- java
- 회고
- 네트워크
- dto
- 프로그래머스
- 개발자
- tcp
- aws
- 스프링
- 자바
- 개발
- Docker
- lambda
- spring
- 라우터
- ec2
- SpringBoot
- s3
- osi7계층
- rds
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |