Java&Spring
-
@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..
-
자바를 조심스럽게 열어 보았다 - Switch 문Java&Spring/Java 2023. 5. 4. 21:31
이전 블로그 포스팅에서는 자바의 스위치문이 if-else 문을 이용하는 것 보다 성능적으로 좋을 수 있다라는 이야기를 하였습니다. 이번 글에서는 자바 12 이상의 표현에서 장점 , 동일성과 동등성의 개념을 이야가하며 스위치문의 문자열 매칭 방식의 대하여 알아봅니다. 1. 람다 표현에서 문자열 생성의 장점 자바 버전 12 이상에서 사용하는 람다 표현식을 활용하면 다음과 같이 작성 할 수 있습니다. public class Application { public static void main(String[] args) { int value = 4; switch (value){ case 4 -> System.out.println(value + "this is four"); case 1 -> System.out.p..
-
@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) 서버에서 코드를 ..
-
스프링부트 GCS 연동 part1Java&Spring/Spring 2023. 1. 25. 14:59
서문: 스프링 부트와 gcs 연동에 관한 글이다. 관련 블로그를 찾아 따라할려고 했지만 , 서버를 로컬에서 돌리고 가상 인스턴스에 올리지 않는 가정에서 시작하여 차이가 있다. 1. gcs 가 발급을 하는 키중 하나인 json 파일을 보안상의 문제로 github 에 올릴 수가 없다. 2. 이전 프로젝트에서 aws s3 를 이용하여 구축을 했던 설정처럼 Iam 유저에서 secret key 와 access key 값을 뽑아 yml 파일에 입력하는 방식으로 진행을 하고자한다. 사전 준비 사항 1. GCP VM 인스턴스 외부 , 내부 ip 확인 -----------------------------------------------------------------------------------------------..