Java&Spring/Spring
-
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,..
-
스프링부트 GCS 연동 part2Java&Spring/Spring 2023. 1. 26. 00:24
Part 1 에서 Storage 생성과 Iam 서비스 계정을 만들었다. https://chosunghyun18.tistory.com/72 스프링부트 GCS 연동 part1 서문: 스프링 부트와 gcs 연동에 관한 글이다. 관련 블로그를 찾아 따라할려고 했지만 , 서버를 로컬에서 돌리고 가상 인스턴스에 올리지 않는 가정에서 시작하여 차이가 있다. 1. gcs 가 발급을 하 chosunghyun18.tistory.com Part2는 이미지 업로드 까지 해보자. 간단하게 구글 클라우드의 서비스 계정을 어플리케이션에 올리려는 방식을 할려고 했지만 , 클라우드에서 필요한 조건들을 만족하기 어렵기 때문에 ,github 에 특정 값을 제외하고 json 파일을 올리고 , vm(gcp instance) 서버에서 코드를 ..