Java&Spring/Spring
-
Tomcat 의 동작원리 (Tomcat 내부 구성)Java&Spring/Spring 2025. 8. 2. 19:31
서버의 동작과 Tomcat 의 내부 구조이번 포스팅은 간단한 서버의 동작 원리와 Tomcat 을 설명합니다.Server에는 다양한 종류가 있으며 각각의 역할의 따라 구분합니다.WebServer - 요청에 맞는 정적파일을 반환해주는 역할WAS(Web Applicataion Server) - DB 또는 DB 서버에 접근하는 역할을 하거나, 복잡한 비즈니스 로직을 처리하는 역할프록시 서버, 배치 서버, 파일 서버 등등Webserver 만으로는 모든 일을 처리하는데 과부하가 걸리며 WAS 서버를 통해 사용자의 요청 부하를 분산합니다. 서버가 사용자의 요청을 어떻게 받는지의 대하여 기초적인 설명을 하면 다음과 같습니다. 사용자의 요청은 어떻게 처리하는가? 서버는 TCP 통신으로 외부 네트워크에서 들어온 요..
-
Spring 직렬화, dto 의 잘못된 이름의 함수가 있는 경우Java&Spring/Spring 2024. 6. 15. 17:47
Spring 의 컨트롤러 어노테이션인 RestController 를 사용하면, 함수의 리턴값이 json 으로 매핑이 된다. 다음과 같은 dto 의 경우는 getCapitalName 과 같은 함수가 있다. @Getterpublic static class RequestDTo { private final String name = "kris"; private final int age = 12 ; public String getThisIsFake() { return "fake"; } public String calculate() { return "false"; }} Spring 에서는 obejct mapper 의 replication 의 기능으로 이 함수가 필드 값을 호출하는 geeter 인지 아는 착각을 한다..
-
Spring vs Spring BootJava&Spring/Spring 2023. 10. 8. 20:29
Spring ,Spring Boot의 차이의 관한 글이다. Spring,Spring Boot,Spring Cloud,Spring MVC 이름 부터 Spring 이 전부 들어간다. 지금 다니는 면접에서도 Spring 과 Spring boot 의 차이를 물어 봤다. 당시에는 너무 쉬운 질문인 것 같아서 이런것도 질문하시나 했는데시간이 흘러 주변 지인들을 보니 이 두개의 구별을 잘 못하시는 분들을 만났다. 또한 나 조차, 당시에 거만한 태도였던 것 같다. 이론적인 설명보다는 직접 해보는게 좋다. Spring 프로젝트를 생성하고 디펜던시가 아무것도 없이 실행을 먼저해보자. 그리고 SpringBoot를 실행한 경험처럼 브라우저에http://127.0.01:8080 을 처본다. 당연하게 아무것도 나오는게 없어..
-
@Transactional (1)Java&Spring/Spring 2023. 8. 9. 17:21
@Transactional 은 Aop 의 관점에서는 사용하기는 편리하지만 , 개발자가 동작원리를 이해를 기반으로 해야 효과적인 troubleshooting 이 가능하다 라고 생각한다. 학생 Id 를 이용하여 , 10 명의 학생 객체를 만들려고 한다. 식별자는 db 에서 생성을 받는다하자. 다음 코드가 동작을 정상적으로 할까 ? @Service public class SomeService { @Transactional public void methodA(int studentId) { Student member = new Student(studentId) } @Transactional public void methodB() { for(int i = 0 ; i < 10 ;i++) { methodA(i) } }..
-
Q . SpringBoot 에서 경로를 어떻게 인식을 하는 것인가 ? part 1Java&Spring/Spring 2023. 8. 5. 15:29
질문이 나온 배경글이다. https://chosunghyun18.tistory.com/126 경로 에러 추가 하기 프로젝트 중 경로를 잘못 입력했을때 500 에러가 나는 것을 확인 했다. api 를 설계하는데 있어 사용자에게 서버 로직에러인 500 에러를 알려주는것은 좋은 설계가 아니라고 한다. 이를 바꿔 보자. chosunghyun18.tistory.com SpringBoot 프래임워크를 사용하여 간단하게 어노테이션을 통하여 지금 까지 URL 경로들을 설정해 주었다. 원리가 뭘까 ? 어노테이션을 먼저 따라가 보자. 프렌젠테이션 레이어의 컨트롤러 코드의 예시이다. @RestController @RequestMapping("/place") @RequiredArgsConstructor public class..
-
@RequiredArgsConsructor ,@NoArgsConstructor , @AllArgsConstructorJava&Spring/Spring 2023. 2. 15. 18:13
지난 블로그 https://chosunghyun18.tistory.com/76 @RequiredArgsConstructor, @NotNull, @Valid ,@NotBlank 어노테이션들을 항상 정리하고 외우지만, 기억 보다는 기억을 이라는 말이 있다. 정리를 한번 하고 가자. 1. 생성자의 활용 Class 의 기본 전제는 객체를 사용하는데 있어 생성자가 필연적이다 라 chosunghyun18.tistory.com Lombok을 사용하면 생성자를 자동으로 생성할 수 있다. 지난 블로그에서 이미 우리는 하나의 클라스에 여러개의 생성자를 만들 수가 있다라고 이야기를 했다. 어노테이션 정리를 먼저 하자. @NoArgsConstructor 파라미터가 없는 기본 생성자를 생성한다. @AllArgsConstruct..
-
@RequiredArgsConstructor, @NotNull, @Valid ,@NotBlankJava&Spring/Spring 2023. 2. 15. 17:42
어노테이션들을 항상 정리하고 외우지만, 기억 보다는 기억을 이라는 말이 있다. 정리를 한번 하고 가자. 1. 생성자의 활용 Class 의 기본 전제는 객체를 사용하는데 있어 생성자가 필연적이다 라는 것을 전제로 하자. 생성자라는 것은 클라스당 하나 라는 편견은 버리자. 다음과 같이 객체를 넘겨서 생성 하는 방식과 모든 인자값 을 넘겨 받는 방식이 존재한다. 이러한 방식을 생성자 오버로딩이라 한다. public static class PrivateTodoResponse{ private Long private_todo_id ; private String task; private LocalDate date; private String imageUrl; private Boolean complete; privat..
-
em.persist 이후 get$ObjsectId() 가 가능 한가?Java&Spring/Spring 2023. 2. 4. 17:46
코드를 보자 @Entity public class PrivateTodo { @Id @GeneratedValue @Column(name = "private_todo_id") //pk private Long id ; .... > -> id 에 null 이 들어가는 경우를 열어둔 것은 이글의 제목의 답이 될 수 있다. Entity Manager 를 통해서 PrivateTodo의 객체를 DB 에 저장하는 코드이다. @Repository @RequiredArgsConstructor public class PrivateTodoRepository { @Autowired private final EntityManager em; public PrivateTodo save(Member member ,String task,..