\[뽀 - 개발을 진행하며 부족했던 부분을 공부하고 블로그 정리직접 개발 시작부터 배포까지 혼자 진행해보기정의 : AI를 통한 자동 카테고리 분류 API목표프로젝트 시작부터 배포까지 홀로 백엔드 담당실무급의 백엔드 경험 및 노하우 터득TDD 기반의 기능 구현개발 능력을
Test Driven Development의 약자Agile 방법론 중 하나인 XP의 "Test-First" 개념에 기반을 둔 단순한 설계를 중요시 합니다.작은 단위의 테스트 케이스를 작성하고 이를 통과하는 코드를 추가하는 단계를 반복하여 구현합니다." 급변하는 세상을
TDD 블로그 하나에 다 정리하여 넣기에는 양이 많아 코드 리뷰와 분리했습니다. 구조 Domain Test 행위 테스트 위주로 테스트를 진행했습니다. Test Code 각 기능에 대한 테스트 코드는 Github에서 확인하실 수 있습니다. Github : Cow
springboot로 Rest API 개발을 진행하며 자동으로 API 문서 자동화를 했습니다.@Configuration : @EnableSwagger2 : @Bean : restAPI( ) :apiInfo( ) :
Test 시 사용할 DB 사용federated, DB 복사
AWS의 RDS로 어플리케이션 DB 구축AWS의 RDS 연동
CowAPI의 사용자 관련 기능입니다.회원가입, 로그인, 회원정보 수정, 삭제가 가능합니다.JWT 토큰으로 특정 사용자를 구분합니다.권한은 관리자와 일반 사용자가 있습니다.백엔드를 집중할 수 있도록 백엔드와 프론트 엔드를 독립적으로 개발할 수 있는 MVC 패턴을 이용합
@Api@RequestMapping@RestController@RequestHeader@RequestBody@ReqeustParam@Service@RequiredArgsConstructor@Transactional@RepositoryJpaRepository@Getter
CowAPI의 QnA 관련 기능입니다.QnA는 생성, 조회, 수정, 삭제가 가능합니다. (O)QnA가 생성될 경우 Slack에 알림을 보냅니다. (X)User의 구조와 동일합니다.DB의 QnA 테이블은 다음과 같습니다.QnA는 User table과 many to one
게시글 하나에 작성하기에는 양이 많아지기 때문에 코드 리뷰를 분리했습니다.자세한 코드는 Github에서 확인하실 수 있습니다.구현중QnA는 생성, 조회, 수정, 삭제가 가능합니다. (O)추가적으로 최신순, QnAId 순으로 정렬된 검색과 페이지네이션이 있습니다. (O)
CowAPI의 공지 관련 기능입니다.일반유저는 공지 생성, 수정, 삭제가 불가능합니다.User와 동일한 MVC 패턴 구조 입니다.DB의 Notice 테이블은 다음과 같습니다.Notice는 User table과 many to one 매핑이 됩니다.Github : CowA
게시글 하나에 작성하기에는 양이 많아지기 때문에 코드 리뷰를 분리했습니다.자세한 코드는 Github에서 확인하실 수 있습니다.현재는 Table의 admin (true/false)를 통해서 권한을 확인합니다.Springboot Security를 통한 권한 접근 제어를 구
😎 1. [CowAPI]Notice 요구사항에 따라 공지에 대해 유저의 권한을 관리해야 합니다. 프로토타입으로 User DB의 isAdmin 으로 if문을 걸어서 구현을 했습니다. Springboot security를 사용하여 사용자 관리를 하겠습니다. 아래의
JWT를 통해 사용자를 인증 및 인가를 처리하기 위해 SpringBoot Security를 사용합니다.Role을 Admin과 User로 나눕니다.Role를 스스로 구현해 보았지만 공식 문서와 블로그를 찾으며 구조가 잘못되었다는 것을 발견하게 되었습니다.최대한 DB를 수
foreign key로 참조된 데이터가 무한하게 요청이 가는 현상클라이언트가 필요하지 않은 데이터(password, isDeleted)를 보냄imgUser와 Notice가 UserId로 참조 되어 있다고 생각해보자Notice를 반환할 경우 Notice안에 있는 User
문제프로젝트를 재설계 해야하는 문제점이 있습니다.원인프로젝트를 수행하면서 학습한 것을 바탕으로 프로젝트를 수정 하려고 합니다.해결방법프로젝트를 기획, API, DB를 재설계하고 코드들을 수정합니다.설계기획APIDB
사용자JWT 토큰을 통한 사용자 인증OAuth2.0을 사용한 로그인 서비스관리자와 일반 사용자 권한대시보드 (home)SSE (Server Sent Event)를 통한 실시간 처리공지사용자의 권한 (관리자, 일반 사용자)에 따른 접근 제어QnA새로운 게시글이 올라올 경
비회원일 때, 접근하는 HOME 페이지
회원 가입로그인Naver OAuth마이페이지회원 수정회원 탈퇴로그아웃대시보드QnA List 조회 (페이지 네이션, 0 ~ 5개)QnA 작성QnA 조회QnA 수정QnA 삭제공지 List 조회 (페이지 네이션, 0 ~ 5개)공지 생성공지 조회공지 수정공지 삭제AI list
문제프로젝트를 진행하면서 프론트 엔드와의 협업을 해야한다.프론트엔드가 배포된 상태에서 바로 요청과 응답을 확인할 수 있도록 한다면 더욱 빠르게 개발을 진행할 수 있다.원인백엔드에서는 아직 기능이 완료되지 않았다.해결방안더미 서버를 만들어서 정해진 요청과 응답을 할 수
더미 서버를 구성하여 프론트엔드와 협업을 진행하기로 했습니다.더미 서버에 배포를 진행 해야합니다.git 원격 저장소인 Github에 코드가 저장되어 있어야 합니다.Java11 + Springboot + GradleAWS EC2 인스턴스git 설치java 설치git 저장
DB 설계입니다.Dashboard와 Ai 는 실시간 처리와 많은 수정이 이루어지기 때문에 Redis를 고려하고 있습니다.하지만, 빠른 개발을 위해 먼저 mysql을 통한 구현 후 Redis를 적용할 예정입니다.
문제WebSecurityConfigurerAdapter에 가로 줄이 그어졌습니다.원인WebSecurityConfigurerAdapter가 deprecated 되었기 때문입니다.참조 : 공식문서해결방법상속을 받아서 @Overwrite 하지 않고 직접 @Bean에 등록합니
대시보드를 실시간으로 보여주는 기능을 구현합니다.실시간 처리에는 다음과 같은 기술들이 있습니다.polling클라이언트가 일정한 주기로 서버에 업데이트 요청을 보내는 방법이다.지속적인 HTTP 요청이 발생하기 때문에 리소스 낭비가 발생한다.websoket실시간 양방향 통
문제"Ai"와 "Ai 정보들을 이용할 대시보드"를 SSE를 이용하여 실시간으로 처리하려고 합니다.publish, subscribe 패턴을 사용하여 대시보드를 publish 하려고 합니다.동기식으로 처리한다면 subscribe 중 인 다른 클라이언트로 인해 지연이 발생합
에러 발생시 메세지를 custom 하여 body에 담아서 클라이언트에게 전달 하려고 합니다.JVM 이 Exception을 처리 하기 전에 catch 해야합니다.전역 처리컨트롤 하단에서 처리메소드 단위 처리저는 다음과 장점으로 전역 처리를 합니다.하나의 클래스로 모든 컨
대시보드 프론트 구현을 해야합니다.대시보드 기능이 완료되지 않는 상황에서 프론트 엔드와의 협업이 끝난 상황입니다.코드를 확인해보니 NAV 컴포넌트는 그대로 사용하면 됩니다.제가 직접 구현하려고 합니다.<NavigationBar/>: 기존의 네비게이션을 활용합니다.
API로 AI 서비스를 제공해주는 기능을 구현 해야합니다.기존의 방식의 MVC 패턴만을 사용한다면 구현할 수 있습니다.하지만, 새로운 모델이 추가될때마다 Controller layer에 함수를 새로 작성해야하는 문제가 있습니다. 계속해서 새로운 모델이 추가 될때마다 최
현재 Springboot + React로 Server Sent Event를 구현했습니다.하지만, 실시간 처리를 하기위해 너무 많은 요청을 보내는 문제가 발생했습니다.특정 시간을 기준으로 그 시간이 지날때마다 요청을 보내고 있습니다.특정 Event가 발생할때만 실시간으로
QnA 등록시 슬랙방에 알람 보내기 기능 구현Slack 앱 생성Slack 채널 생성참조 : Slack SDK for Java
공지 기능에 권한 기능 부여하기
NAVER OAuth 2.0 을 사용한 로그인 기능NAVER 개발자 센터에서 애플리케이션 등록사용자가 OAuth 로그인을 요청한다.프론트엔드에서 state를 저장하고 로그인 페이지로 리다이렉트한다.Autherization server에서 state와 code를 콜백받는
MAC에서 EC2 접속하기EC2 와 pem key
문제대시보드를 구현하면서 너무 많은 응답을 받습니다.원인Publish/Subscribe 패턴을 사용합니다.Subscribe를 구분하지 못하여 응답을 지속적으로 보냈습니다.해결방법Subscribe를 구분할 수 있도록 합니다.코드
Jenkins 학습Jenkins 을 이용하여 무중단 배포수작업으로 진행하던 배포 자동화Java 11 설치jenkins 설치Jenkins port 변경 (JENKINS_PORT = "8080" -> "9090")
서버의 응답이 너무 느리다.서버의 지역이 오레곤 이였다.참조 : cloudping서버의 지역을 이전IAM 생성사용자 -> 사용자 이름 -> 액세스 키 -> 사용자 만들기 -> .csv 다운 (영구 보관)사용자 그룹 -> 사용자 추가 -> 권한역할 -> AWS 서비스 -
jenkins 시작제 블로그 참고
freestyle로 레포지토리를 생성하고 script로 clone 하는 부분까지는 성공했다.하지만, 단계별로 실행하고 확인하기 어려웠고 매번 clone을 한다면 .ignore된 파일들을 추가하기 어렵다는 문제가 발생했다.JenkinsFile을 생성했고 다음과 같은 파이
AI 서비스를 이용하기 위해 API로 요청을 보낼 때, DNS 가 아닌 IP로 직접 요청을 보내야했다.프론트 정적 파일로 요청을 주고 받는 것이 아닌 API로 요청을 주고 받는다.Nginx를 이용하여 API로 들어온 요청을 포워딩 한다.직접 탄력적 주소가 아닌 DNS
1. 목표 젠킨스를 이용하여 프론트 엔드 배포 자동화 및 무중단 배포 2. 준비물 참고 : AWS NodeJs 3. 젠킨스
젠킨스를 이용하여 백엔드 배포 자동화 및 무중단 배포webhook
오늘 방문자 수가 갱신이 되지 않는 버그 발생대시보드가 2초마다 갱신되기 때문에 0시 0분 0초 ~ 0시 0분 2초 사이에 today User를 0으로 만들었다.하지만 해당 시간에 구독자가 없을 경우 갱신이 되지 않는다.springboot의 스케줄러를 사용한다.
AWS의 서버 지역 이전을 서울로 완료하였습니다.이전 AWS 서버를 종료합니다.RDS 삭제백업 파일을 따로 만들지 않고 완전히 삭제합니다.탄력적 IP 삭제EC2에 연결된 탄력적 IP를 연결 해제하고 릴리스 하여 삭제합니다.EC2 삭제종료를 하게 되면 일정 시간이 지난
https 를 사용하여 데이터를 주고 받을 것 이다.https 로 데이터를 주고 받을 수 있게 되었다.하지만, 잘되던 dashboard의 구독이 되지 않고 있음
목표Swagger를 통한 API 문서 자동화cowapi.com 도메인에 적용코드제 블로그 참조Code 는 github 참조nginxcowapi.config 파일 수정결과CowAPI의 Swagger