본문 바로가기

개발일지

20231228 - 스프링 S3 사용하기 S3를 이용해서 파일을 첨부하고 다운로드할 수 있는 기능을 구현하기로 했다. 우선 S3에서 버킷을 만든 후 스프링에서 필요한 코드를 구현했다. // application.properties aws.s3.bucket = 버킷 이름 aws.s3.stack.auto = false aws.s3.region.static = ap-northeast-2 aws.s3.credentials.accessKey = 액세스 키 aws.s3.credentials.secretKey = 비밀 액세스 키 다음은 S3Config 클래스이다. @Configuration public class S3Config { @Value("${aws.s3.credentials.accessKey}") private String accessKey; @V.. 더보기
20231227 - 예외처리 스프링 프레임워크에서는 @ControllerAdvice 나 @RestControllerAdvice 어노테이션을 통해 넓은 범위를 컨트롤하며 예외처리를 할 수 있다. 둘의 차이는 RestController는 Json데이터로 응답값을 반환한다는 점이다. 이를 통해 예외처리를 한다면 클래스 하나로 모든 컨트롤러의 예외처리를 수행할 수 있으며, try-catch 문을 사용하지 않아도 되므로 코드의 가독성 또한 좋아진다. 코드를 살펴보자면, @RestControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(NoSuchElementException.class) protected ResponseEntity handle.. 더보기
20231226 - 다대다 관계와 중간테이블 다대다 관계일 때 @ManyToMany 와 @JoinTable로 중간테이블을 생성하여 매핑하는 방법은 추천하지 않는다고 한다. 그 이유는 필수적인 정보 외에도 필요없는 정보들 까지 중간테이블에 담길수도 있기 때문이다. 이는 효율성이 떨어지고 노출되어서는 안되는 정보들이 노출될 위험이 생긴다. 그래서 중간테이블 Entity를 직접 생성하여 @ManyToOne을 이용해 양쪽으로 매핑해주는 방법을 사용한다. @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class BoardUsers{ @EmbeddedId private BoardUsersPK boardUsersPK; @ManyToOne(fetch = FetchType.LAZ.. 더보기
20231226 - 프로그래머스/140108 https://school.programmers.co.kr/learn/courses/30/lessons/140108 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr class Solution { public int solution(String s) { int answer = 0; int index = 0; int isX = 0; int isNotX = 0; List strList = new ArrayList(); StringBuilder sb = new StringBuilder(); for(int i=0; i 더보기
20231221 - cascade, orphanRemoval 게시물과 댓글 기능을 모두 구현하고나서 게시물을 지우려고 하면 아래와 같은 오류가 뜬다. ava.sql.SQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (`board`.`comment`, CONSTRAINT `FKs1slvnkuemjsq2kj4h3vhx7i1` FOREIGN KEY (`post_id`) REFERENCES `post` (`id`)) 게시물의 Id 즉 post_id 를 Comment 테이블에서 참조하고 있으므로 해당 post_id를 가지고 있는 부모 행이 삭제되려하기 때문에 발생한 오류이다. public class Post extends Ti.. 더보기
20231220 - 프로그래머스/131128 https://school.programmers.co.kr/learn/courses/30/lessons/131128 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr class Solution { public String solution(String X, String Y) { String answer = ""; List pairList = new ArrayList(); StringBuilder sb = new StringBuilder(); for(int i=9; i>=0; i--){ if(X.contains(i+"") && Y.contains(i+"")){ .. 더보기
20231219 - 엔티티 연관관계(게시물, 유저, 댓글) @Entity어노테이션을 이용해서 JPA를 통해 클래스를 관리해 준다. 그리고 연관관계를 매핑해 주어 연관된 데이터를 참조할 수 있도록 설정할 수 있다. public class Post extends Timestamp { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(nullable = false) private String title; @Column(nullable = false) private String content; @ManyToOne @JoinColumn(name = "user_id") private User user; ... } public class User extends Timestamp {.. 더보기
20231218 - 페이징 구현 게시물 목록 조회 기능에서 페이징 기능을 추가하여 구현해 보았다. //Controller.java @GetMapping("") public Page getPostList(@RequestParam("page") int page, @RequestParam("size") int size, @RequestParam("sortBy") String sortBy, @RequestParam("isAsc") boolean isAsc ){ return postService.getPostList(page,size,sortBy,isAsc); } 컨트롤러단에서 파라미터로 페이징 기능에 필요한 데이터들을 받아온다. public Page getPostList(int page, int size, String sortBy, boole.. 더보기