프로젝트

프로젝트

[프로젝트] 여행 정보 플랫폼

현재 여행 관련 서비스를 제공하는 웹 프로젝트를 진행 중이다. 서블릿과 jsp를 사용하여 틀을 만들었다. 우선 지금까지 만든 정보를 기록하려고 한다. 웹 서블릿과 jsp를 중점으로 플젝을 진행한 적은 처음이라 아직도 어색하고 부족한 부분이 많았다. 그래도 확실히 로우레벨로 개발을 하다 보니 기초가 많이 늘었다고 생각한다. 이후 이걸 프레임워크를 사용하여 더욱 발전시킬 생각이다. 프로젝트 내용이 많아서 전체적으로 요약하며 설명할 예정이다. 주요 기능 header와 footer를 사용하여 중복되는 화면을 재사용하였다. 다른 jsp에서 include를 사용하여 그대로 가져갈 수 있다. 또한 로그인과 회원가입의 경우 간단하게 modal 창을 사용하였다. 이전 프로젝트는 백엔드만 맡아서 진행하였기에 검증의 경우도..

프로젝트/ChatUniv

[프로젝트] ChatUniv 페이징 최적화

페이징 최적화를 진행해 보았다. 페이징 최적화에는 크게 두 가지 방법이 있다. NoOffset과 커버링 인덱스를 사용하는 방법이 존재한다. 이번에 프로젝트에서 게시글과 댓글의 페이징 최적화를 진행하였는데, 이 글은 게시글에 관해서만 작성할 예정이다. 일반적인 페이징 쿼리 기존의 코드는 아래와 같았다. public interface BoardRepository extends JpaRepository { Page findAll(final Pageable pageable); } @Transactional(readOnly = true) public BoardAllResponse findAllBoards(final Pageable pageable) { Page sortedBoards = boardRepositor..

프로젝트/ChatUniv

[프로젝트] ChatUniv GPT 적용

이번에는 GPT를 적용하는 내용을 정리할 것이다. openAi를 호출하는 것이기에 큰 어려움은 없다. https://www.baeldung.com/spring-boot-chatgpt-api-openai Using OpenAI ChatGPT APIs in Spring Boot | Baeldung Learn how to use the API of OpenAI ChatGPT in Spring Boot applications. www.baeldung.com 위 내용을 참고하였다. 따라서 중복되는 내용은 생략하여 진행하겠다. Chat @Entity @Table(name = "CHAT") public class Chat extends BaseEntity { @Id @GeneratedValue(strategy = G..

프로젝트/ChatUniv

[프로젝트] ChatUniv Comment API, 동적 테스트 #4

이번에는 Comment API에 관한 내용을 정리할 것이다. 우선 기본적으로 Board아래에 comment가 존재한다. 하지만 확장성을 고려하여 chat이나 다른 여러 comment도 생길 수 있다고 생각하여 만들게 되었다. 이로 인해 새로운 동적테스트도 적용해 보았고, 확장성에 대비하여 코드를 작성하였다. Comment @Entity @Inheritance(strategy = InheritanceType.JOINED) @Table(name = "COMMENT") @DiscriminatorColumn public abstract class Comment { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(nu..

프로젝트/ChatUniv

[프로젝트] ChatUniv Board API #3

이번에는 Board API에 관해 정리할 예정이다. 이번 글은 전반적인 코드 설명과 여러 시행착오에 대한 설명을 할 예정이다. Board는 일반적인 게시판과 일치한다. 하지만 코드를 작성할때 컨벤션 및 클린코드를 적용하려 노력하였다. 또한 여러 테스트를 통해 동작을 검증하였고, 그 과정에서 발생한 시행착오를 기록하겠다. Board는 현재 예외에 대한 문서화도 진행되어 있다. Board @Entity public class Board { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(nullable = false) private String title; @Column(nullable = false) @Lob ..

프로젝트/ChatUniv

[프로젝트] ChatUniv Member API #2

오늘은 Member API에 관해 정리할 예정이다. 전반적인 코드 설명과 구조 변경에 대한 설명을 할 예정이다. 기존에 Exception과 Advice를 전부 묶어서 관리하였다. 그 결과 각자 개발 후 머지를 하는 과정에서 conflict이 자주 발생하였다. 또한 예외가 많아질수록 관리하기 어렵다는 의견도 많았다. 따라서 도메인별로 예외를 관리하도록 하였다. Member API는 현재 간단하게 되어있다. 추후 추가될 예정이지만 현재는 Member 조회와 비밀번호 변경이 만들어져 있다. Member @Entity public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(nullab..

프로젝트/ChatUniv

[프로젝트] ChatUniv 전반적인 설계 및 Auth구조 #1

방학 동안에 프로젝트를 진행하기로 하였다. chat ai를 사용하여 대학생들에게 여러 정보를 전달해 주는 등 여러 기능을 추가할 생각이다. 이 프로젝트는 실제 서비스를 할 생각이기에 꼼꼼하게 코드를 작성하고 서로 리뷰를 할 생각이다. 또한 서비스를 통해 트래픽을 받아보는 경험을 할 수 있을 것이라 생각된다. 각자 맡은 파트가 있기에 초반 Auth 구조의 경우 내가 개발을 하지는 않았지만 이 프로젝트를 통해 서로 모두 공부의 목적도 있기에 모든 코드를 이해하고, 분석하며 코드리뷰를 진행했다. 또한 컨벤션을 정하여 이를 기준으로 작성하기로 하였다. 코드의 통일성 및 가독성을 위한 선택이다. Merge도 매우 신중하게 진행되며, 코드리뷰를 2인 이상 받아야지만 Merge가 가능해진다. 또한 백엔드의 경우 Lo..

프로젝트/커뮤니티

[프로젝트] 커뮤니티 REST API 서버만들기 #10 도메인 테스트 작성

이번에는 도메인 테스트를 추가하였다. 원래 컨트롤러와 서비스단위에서만 테스트코드를 작성하였는데, 도메인도 추가하였다. 도메인 내에 있는 메서드를 테스트하였다. 코드가 너무 많기 때문에 가장 코드가 길고, 복잡한 Board를 주로 설명하겠다. 기존의 Board이다. Board @Entity @Getter @Builder @NoArgsConstructor(access = AccessLevel.PROTECTED) @AllArgsConstructor public class Board extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "board_id") private Long id; @Column(..

프로젝트/커뮤니티

[프로젝트] 커뮤니티 REST API 서버만들기 #9 카테고리 API 만들기

이번에는 계층형 카테고리를 추가하였다. 예를 들어 현재 내 티스토리 블로그와 같은 모양을 생각하고 만들었다. 고민한 점은 모든 게시글이 카테고리를 가지고 있는 것이 맞을까 라는 생각이었다. 따라서 굳이 카테고리에 넣지 않아도 되도록 만들었다. 중요한 부분위주로 설명하겠다. Category @NoArgsConstructor(access = AccessLevel.PROTECTED) @Getter @Entity public class Category { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "category_id") private Long id; @Column(nullable = false) private String n..

프로젝트/커뮤니티

[프로젝트] 커뮤니티 REST API 서버만들기 #8 어드민 페이지 만들기

이번에는 어드민 페이지를 추가하였다. 우선 정지에 관련해서 처리할 수 있는 기능을 추가하였는데, 더 세부적인 기능은 추후 추가할 예정이다. 오늘은 유저, 게시판, 댓글에 대해 정지목록을 조회할 수 있고, 정지를 풀어주거나, 삭제할 수 있다. 각각 정지가 당하면, 유저는 권한이 바뀌어서 다른 곳에 접속을 못하게 되고, 게시판이나 댓글의 경우 조회가 안되도록 설정하였다. 그 외에는 3개다 비슷한 로직이기 때문에, 유저에 관해 설명하겠다. Member @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @Entity public class Member extends BaseEntity { @Id @GeneratedValue(strategy = Generat..

javajoha
'프로젝트' 태그의 글 목록