목록전체 글 (25)
기록하는 공간

처음 프로젝트를 진행했을 때, Https를 적용하기 위해, AWS의 로드밸런서를 사용했었다. 하지만 로드밸런서를 사용하게 되면서 대학생인 나에게 부담되는 금액이 부과되었었다.그래서 NGINX를 사용하여 Https를 적용해 주기로 했다. 아래부터 설명하는 부분은 AWS, GCP 등 클라우드 서비스로 이미 서버를 열어 둔 상태라고 가정한다. 현재 나는 GCP 를 사용하여 우분투 서버를 열었다. NGINX, certbot설치와 SSL인증서 발급먼저 우분투 서버에서 NGINX설치를 하기 전에 업데이트 해준다.$ sudo apt update nginx install$ sudo apt install nginx certbot install$ sudo apt install certbot python3-certbot-n..

먼저, 이전 글에서 말했듯이, 얼마 전 내가 계획했던 목표를 이루게 되었다.그 목표는 혼자 풀스택 개발을 하는 것이었다. 갑자기 왜 풀스택 개발?풀스택 개발을 진행하게 된 이유는 교내에서 진행한 IT경진대회 때문이었다.처음부터 혼자는 아니었는데… 원래 함께 하려던 팀도 있었고, 친구가 있었는데 참가 조건 때문에 상황이 꼬이면서 혼자 남게 되어버렸다! 새로운 언어와 프레임워크혼자 개발을 하게 되었으니, 어떤 프레임워크를 사용할지 고민이 되었지만 이왕 하는 거, 이번 프로젝트는 내가 하고 싶은 거 다 해보기로 했다. 원래는 자바, 스프링부트를 쓰다가 코틀린, 스프링부트를 사용하였다.짧은 시간이었기에 새로운 언어, 라이브러리를 쓰는 것은 결코 쉬운 도전은 아니었지만 도전에는 이유가 있었다. 코틀린은 학교 강의..

나에게 가장 큰 변화가 있던 시기에서 1년이 지났다. 그냥 기록 용으로 작성하는 느낌이라 두서없는 글이 될 예정이다. 2023 2학년 대학생 개발 공부 시작제대로 된 개발 공부(?)를 시작한 지 1년 정도 되었다. 22년 9월 전역 후 자바 언어 공부와 알고리즘 문제를 풀며 시간을 보내고, 23년이 시작되면서 스프링부트를 공부했다. 인프런의 대표적인 백엔드 강의 영한님의 강의를 보며 시작했다. 아마 백엔드를 시작하려는 분들은 다들 그렇게 시작하지 않을까 싶다. 5월 첫 해커톤강의도 듣고, 알고리즘 공부도 하며 어영부영 5월이 되었을 즈음에, 해커톤이라는 좋은 기회가 있어서 참여하게 되었다. 사실 그 당시 해커톤을 하면서 나는 아무것도 못하고 마무리가 되었다. 같은 팀원들에게 미안할 정도로 아무것도 못했다..

프로젝트 진행 중 customException을 어떻게 관리해야 할까 생각해 보았다. 문제점 현재 ControllerAdvice를 통해 @RestControllerAdvice 어노테이션을 사용하여 전역적으로 예외를 핸들링할 수 있도록 해주었다. 하나의 기능에도 많은 exception이 존재하고, 위의 ControllerAdvice에서도 customException이 많으면 많아질수록 관리가 힘들었다. 해결방법 customException을 그룹화를 해주는 것이다. 그룹화를 하기 위해 RuntimeException을 상속한 추상클래스를 생성해 준다. 이 GroupException은 관련된 다른 exception들을 가진다. 이와 같이 GroupException을 상속한다. 관련한 exception들을 모두..

빌더 패턴…바로 예시부터 보면서 확인한다.예시) 실제 사용 중인 코드Board를 생성한다.@Entity@Getter@NoArgsConstructor(access = AccessLevel.PROTECTED)public class Board { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "board_id") @Schema(description = "아카이빙 Id", example = "1") private Long boardId; @Schema(description = "아카이빙 제목", example = "강아지와 산책한 날") private String boardTitle; @S..

assertThatThrownBy와 assertThatCode는 무엇인가. assertThatThrownBy(() -> ~~ ) assertThatThrownBy()는 예외가 던져지면 테스트가 성공한다. 예외가 던져지지 않으면 오류가 발생한다. assertThatCode(() -> ~~) assertThatCode()는 예외가 던져지지 않으면 실패하지 않는다. 어떠한 예외도 던지지 않을 경우 assertThatCode(() -> ~~).doesNotThrowAnyException()를 사용하면 된다. 아래의 예시를 보면 이해가 더 쉬울 것이다. 예시 예를 들어 Car라는 클래스가 있다. public class Car { private final String name; private int position..

코드를 짜면서 controller 들을 훑어보았는데, 대부분 @RequestParam을 사용하였다. … 문득 생각이 들었다. @RequestParam은 무엇일까? 왜 이걸 사용하는거지? 내가 이걸 잘 알고 사용하는 건가? 대충은 알고 있다. URL뒤에 ?를 붙이고 key=value 형태로 전달된다는 것을. 근데 또 @PathVariable 이란 어노테이션도 사용가능하지 않나? 어디서 본 적이 있었는데? 둘이 뭐가 다른거지? 그래서 알아보기로 했다. @PathVariable와 @RequestParam 어노테이션은 무엇인가. 💡 클라이언트가 호출한 URL의 파라미터를 받아서 처리하는 어노테이션이다. @PathVariable 이란? 경로 매개변수라고 하고, URL에 직접 포함이 된다. 주로 리소스의 식별자를 ..

JPA에서 다대다 연관관계를 제공한다. @ManyToMany 어노테이션을 사용하는 것이다. 이 글에서는 다대다의 문제점들과 해결책을 설명하고자 한다. 실제로 최근 프로젝트를 진행하면서 사용했던 예시이다 이 코드를 간단히 설명하자면 유저가 스크랩한 공지를 가지고 있기 위해 만들어진 테이블들이다. 유저 테이블과 공지 테이블을 @ManyToMany 어노테이션으로 다대다매핑을 해주었었다. “member_scrap_notice”라는 연결 테이블을 자동으로 생성해 주고 설정해 주니 편리했다. 다대다의 문제점 중간 테이블에는 매핑정보만 들어가고 추가 데이터를 넣는 것이 불가능하다. 중간 테이블이 숨겨져 있기 때문에 쿼리가 예상하지 못하는 형태로 나간다. 실무 비즈니스는 복잡해서 ManyToMany로 풀 수 있는 게 ..