Category 114

SpringBoot JPA 게시판 CRUD 구현(Delete-TDD)

오늘은 지난번에 포스팅한 게시글 수정에 이어 CRUD의 마지막 Delete 기능의 WAS 단 로직을 포스팅하려 합니다. 패키지성 포스팅이기 때문에 이전 포스팅을 보지 않으셨다면 이해되지 않는 부분이 있을 수 있습니다. 글 맨 하단 링크를 통해 확인해주세요 :) Gradle 빌드나 폴더 구조는 깃허브 Bincolog를 참고해주세요. 게시글 삭제 로직은 따로 DTO 클래스를 분류할 필요가 없어서 이전에 만든 Create, Read, Update 기능보다는 훨씬 간단하게 로직이 구현됩니다. Controller 클래스와 Service 클래스만 구현하면 되고, 각각에 해당하는 Test 코드를 구현해보겠습니다. Controller 생성📘 @DeleteMapping("/posts/{postId}") public vo..

JPA 2022.07.25

SpringBoot JPA 게시판 CRUD 구현(Update-게시글 수정)

지난번에 구현한 페이징 처리까지 R(Read)에 해당됩니다. 오늘은 U(Update)에 해당되는 게시글 수정 WAS 단 로직을 포스팅하려 합니다. 약간 패키지성 포스팅이어서 게시판의 Create, Read 포스팅을 보지 않으셨다면 헷갈리실 수 있습니다. 맨 아래에 링크를 통해서 지난번 포스팅을 보시고 오시거나 깃허브 Bincolog를 참고하시는 것을 추천드립니다! Request 생성📗 첫번째로는 Request를 생성합니다. Create, Read와 동일하게 Entity를 사용하지 않고 따로 클래스를 만들어줍니다. 이유는 지난 포스팅에서 언급했습니다 :) @Getter @Builder public class PostEdit { @NotBlank(message = "제목을 입력해주세요.") private S..

JPA 2022.07.21

SpringBoot JPA 게시판 CRUD 구현(다중 조회/ Paging / TDD)

지난번에 포스팅한 게시글 단건 조회에 이어서 오늘은 전체 게시글을 조회하는 WAS 단 로직을 포스팅하려 합니다. 사실 JpaRepository에서 기본적으로 제공하는 findAll() 메서드를 사용하면 단건 조회와 큰 차이점은 없지만, 글이 너무 많은 경우에 비용이 너무 많이 들어가므로 페이징 처리도 함께 구현할 예정입니다. 페이징(Paging)? 우리가 웹사이트에서 흔히 볼 수 있는 페이징은 왜 필요할까요? 페이징 처리가 없다면 스크롤을 계속해서 내려야 하는 상황도 발생할 수 있고, 무엇보다 데이터 처리에 비용이 많이 발생합니다. 페이징 처리를 안 한 상황에서 글이 만약 몇십만 개가 있다면 한 번의 로직으로 DB에서 몇십만 개의 글을 모두 가져와야 할 것입니다. 물론 DB에서 데이터 사이즈로 인해 오류..

JPA 2022.07.21

SpringBoot JPA 게시판 CRUD 구현(Read 단건 조회 및 TDD)

지난번에 포스팅한 Create에 이어서 게시판을 조회하는 WAS 단 로직을 포스팅하려 합니다. 게시판 조회는 단건 조회와 전체 조회로 나뉩니다. 물론 검색 기능도 조회에 해당하지만, 검색 기능은 추후에 포스팅하겠습니다. Gradle 빌드나 프로젝트 구조는 깃허브 Bincolog를 참고해주세요! Response 생성📗 처음에는 PostResponse 클래스를 생성합니다. 저번에 언급했던 Entity와 Request, Response는 분류해야 하기 때문입니다. 못 보신 분들은 아래 사진을 참고해주세요😄 Response 클래스는 서비스 정책에 맞게 구현해야 합니다. 클라이언트에서 어떠한 결과 값을 원하는지에 대해서는 항상 다르기 때문입니다. 저는 게시글을 조회했을 때 해당 게시글의 id값, 제목, 내용을 가..

JPA 2022.07.20

SpringBoot JPA 게시판 CRUD 구현(Create - TDD)

오늘은 지난번에 구현한 게시판 Create 로직의 테스트 케이스를 작성해보려 합니다. 테스트 케이스는 Controller 테스트와 Service 테스트를 구현하려 합니다. 이전 포스팅을 보지 않았다면, 이번 포스팅을 이해하기는 힘드실 것 같아요. 꼭 이전 포스팅을 보고 와주세요! 테스트 디렉토리는 java 하위에 있는 폴더 구조와 동일하게 구조를 맞추셔야 합니다. 폴더 구조와 gradle 빌드는 깃허브를 통해 확인하실 수 있습니다 :) Controller Test 생성📗 로직 테스트에 앞서 기본 클래스를 먼저 생성해줍니다. 앞서 말씀드린 것처럼 build(gradle, maven)에 test 관련 dependency가 추가 되어 있어야 합니다. 테스트 케이스가 처음이신 분들을 고려하여 import 부분도..

JPA 2022.07.18

SpringBoot JPA 게시판 CRUD 구현(Create)

SpringBoot와 JPA를 사용하여 게시판을 구현하는 WAS 단 로직을 포스팅하려 합니다. 기본 프로젝트 설정과 데이터베이스 연결 및 View단은 생략할 예정입니다. Gradle 빌드나 프로젝트 구조는 깃허브 Bincolog를 참고하시면 됩니다. 개인적인 공부로 코드의 결함이 있을 수 있으니 참고만 해주세요 :) Entity 생성📗 처음으로는 Entity를 생성합니다. Entity 클래스는 실제 DB 테이블과 매핑되는 핵심 클래스로, 데이터베이스의 테이블에 존재하는 컬럼들을 필드로 가지는 객체입니다. Entity는 데이터베이스 영속성의 목적으로 사용되기 때문에, 요청이나 응답 값을 전달하는 클래스로 사용하는 것은 좋지 않습니다. 또한, 많은 비즈니스 로직들이 Entity를 기준으로 동작하기 때문에 추..

JPA 2022.07.18

MCMS-YGPA 프로젝트 후기

입사 6개월 차에 MCMS(Media Content Management System) 관련 프로젝트 사용자 웹 페이지 프로젝트를 맡게 되었어요. 사내 프로젝트여서 자세한 내용은 작성하지 못하지만 프로젝트를 하면서 배운 점과 후기를 작성해 보려 합니다 :) 개요 이번 프로젝트는 기업의 시청각 자료들을 관리하고 임직원 분들이 사용하는 웹 사이트를 구축하는 거였어요. 사진,영상,PDF 등 자료들을 관리자 사이트에서 변환하여 등록하고 사용자 사이트에서 확인할 수 있게 했어요. 사실 자료들을 변환하고 다운로드하는 과정들은 처음 해보는 작업이어서 많은 어려움을 느꼈어요😂 이 전 프로젝트처럼 사용자 사이트를 혼자 담당해서 개발을 진행했어요. 이 전 프로젝트에서는 Vue.js 와 Node.js를 사용하였지만, 이 번 ..

Project/Team 2022.07.11

일식 CEO 출신 주니어 개발자 2022년 회고록

2021년 회고록처럼 2022년을 뒤돌아 보며 개발자로서의 성장기를 적어보려 한다. 2022년에는 계획했던 일들의 대부분을 실행으로 옮겨서 자격증부터 프로젝트까지 노력에 대한 결과를 받을 수 있었던 감사한 한 해였다. 신분을 바꾸기 위해 신입 개발자로 회사를 적응해 나가는 이야기에 앞서, 비전공자 출신이라는 타이틀에 벗어나고 싶었던 나의 이야기를 먼저 해보려 한다. 지난 회고록에서 언급했듯이 나는 비전공자 출신이다. 전직을 하여 회사 면접을 볼 때도, '다시 요식업으로 돌아갈 생각은 없으세요?'라는 질문을 항상 받았었다. 한편으로는, '너 갑자기 왜 개발자 하는 거야?'라고 들리기도 했었다. 회사에서 뿐만 아니라 주변 지인들에게도 갑자기 왜 전직하냐는 질문을 항상 받곤 했다. '개발이 좋아서요!'라는 대..

회고록 2022.07.03

[그림으로 공부하는 IT인프라 구조] - 책 리뷰

비전공자 출신으로 개발자로 취업해보니, 코드를 짜는 것 이외에도 공부할 분야가 많다는 것을 몸소 느끼고 있습니다. 특히 최근에 출장을 다녀오면서 서버 쪽에 무지한 제 모습을 보면서 전문적인 강의까지는 수강하지 못하더라도, 관련된 서적은 읽어봐야겠다고 생각이 들었어요. 서버 관련 서적을 찾다가 전반적인 인프라를 소개해주는 이 책을 선정하게 되었습니다. 이번 책 리뷰 편도, 전 편 [읽기 좋은 코드가 좋은 코드다] 포스팅 처럼 사내에서 자체적으로 진행하는 스터디에 필요한 토론 및 발표 자료로 쓰이기 때문에 특별한 형식 없이 준비하기로 했습니다😃 인프라(Infra)? 인프라는 우리말로 직역하면 '기반'이란 뜻으로, 우리의 생활을 지탱하는 바탕이나 토대란 의미를 가지고 있다. 인프라의 대표적인 예로 가스, 수도..

Book Review 2022.06.27

AOP(Aspect-Oriented Programming) 파헤치기

객체 지향 프로그래밍(OOP)란 우리가 실생활에서 쓰는 모든 것을 객체라 하며, 객체 지향 프로그래밍은 프로그램 구현에 필요한 객체를 파악하고 각각의 객체들의 역할이 무엇인지를 정의하며 객체들 간의 상호작용을 통해 프로그램을 만드는 것을 말합니다. 하지만 OOP는 공통된 기능들이 흩어져 존재하는 단점이 있기 때문에, 이 점을 보완하고자 AOP(Aspect-Oriented Programming) 프레임워크가 탄생하게 되었습니다. AOP란? AOP는 관점 지향 프로그래밍이라고 불립니다. 쉽게 말해 어떤 로직을 기준으로 핵심적인 관점과 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화 하겠다는 것입니다. 여기서 모듈화란 어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것을 말합니다. 예를 들어 ..

TIL 2022.06.22