본문 바로가기

전체 글

20240103 - 심화프로젝트 KPT 회고 Keep 시간 내에 각자 맡은 기능 구현을 마칠 수 있었다. 코드리뷰를 통해 프로젝트 진행도를 공유할 수 있었다. Figma, erdCloud 등 협업툴을 적절히 사용했다. 프로젝트 설계가 잘 되어있어서 이후 진행이 순조로웠다. Problem 프로젝트 배포를 진행하지 못했다. 코드의 통일성이 부족했다. 테스트코드 작성이 미흡했다. 트러블슈팅 과정 공유가 부족했다. Try AWS등을 통해 프로젝트 배포를 시도해 본다. 코드리뷰에서 더욱 적극적인 피드백을 통해 코드의 통일성을 보완한다. 협업을 위한 깃 로그를 고려해 본다. 복잡한 비즈니스 로직의 테스트 코드 작성을 시도해 본다. 문제가 발생했을 시 적극적으로 팀원들과 상황을 공유한다. Github https://github.com/chicken-beer/T.. 더보기
20240102 - 프로그래머스/118666 https://school.programmers.co.kr/learn/courses/30/lessons/118666 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr class Solution { public String solution(String[] survey, int[] choices) { String answer = ""; String[] type = {"RT", "CF", "JM", "AN"}; Map typeMap = new HashMap(); StringBuilder sb = new StringBuilder(); for(int i=0; i 0).. 더보기
20240101 - @Transactional 내가 코드를 짜면서 Service단에서 주로 @Transactional을 사용하고 있지만 사실 정확한 동작원리나 사용방법에 대해서 알고 있지 않은 것 같다. 그래서 오늘은 @Transactional에 대해 정리해보려 한다. 우선 트랜잭션이 무엇인지 알아야 한다. 트랜잭션이란 데이터베이스 관리 시스템에서의 상호작용의 단위를 뜻하며 쉽게 말해서 데이터베이스의 상태가 변경될 때의 수행되는 연산들을 말한다. @Transactional를 클래스나 메서드등에 선언해 주면서 해당 범위를 트랜잭션으로 묶어준다. 그러면 우리는 왜 @Transactional을 사용해야 할까? 이는 트랜잭션의 특징(ACID)으로 알아볼 수 있는데 해당 범위를 트랜잭션으로 정해주면서 데이터베이스 관리중에 발생할 수 있는 여러 문제들을 해결해.. 더보기
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.. 더보기