일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- DI
- hanghae99
- WIL
- html
- Hibernate
- Project
- spring
- javascript
- Java
- Spring Security
- flask
- web
- programmers
- SseEmitter
- session
- Stream
- real time web
- JWT
- 생명주기 콜백
- 항해99
- python
- cookie
- JPA
- bean
- server send event
- Anolog
- oauth
- jenkins
- jQuery
- google oauth
- Today
- Total
목록WIL (11)
끄적끄적 코딩일지
기본적인 MVP 개발은 모두 마쳤다. 문제 발생시 분석을 위한 Actuator, Promethus를 적용했고 Jenkins를 구현할때 민감한 정보가 담긴 설정파일이 올라가야 한다는 것에서 Submodule을 이용하여 설정파일을 분리시켰다. 그외 오류들을 수정했으며 약간의 사용자 피드백또한 받을 수 있었다. 카카오톡 로그인에서 크리티컬한 문제가 발생해서 (다른 사용자로 로그인이 되는 문제) 기술 매니져님과 예기를 했지만 원인을 찾지 못했다. 딱 한번 일어나서 원인을 찾기 힘들고 RestTemplate에서 무엇인가 꼬인게 아닐까라는 의심만 하고 있다. 기존에 메소드에서 new로 생성하던것을 bean으로 등록한후 지금까지 다시 문제가 발생하지 않았지만 원인을 정확히 찾아서 해결한것이 아니다 보니 조금 찜찜하기..
MVP 기능 구현이 거의 끝났다. 연속적인 서비스를 제공하기 위해 Jenkins, Nignx를 사용한 CI/CD, 무중단 배포를 구현했고 Jmeter를 사용한 부하테스트,Junit을 사용한 Test Code 작성을 하면서 배포할 준비를 했다. Spring boot를 사용한 제대로된 서비스를 만드는것은 처음이라서 Spring DDD구조를 잘 지키지 못했고 너무 많은 Builder Pattern을 남발하긴 했지만 앞으로 서비스를 운영하면서 하나씩 수정을 해가면 될 일이다.
3주간 실전 프로젝트를 진행하면서 CRUD : QueryDSL,AOP, Redis 모니터링 : Actuator, Spring Admin, Prometheus, Grafana CI/CD : Jenkins, Nginx 등을 알게되었다. 앞으로 공부할것은 많은데 프로젝트를 진행하느라 블로그에 정리할 시간이 부족하다. 끝나고 2~3주일동안 블로그에 정리해야할것같다.
기본적인 CRUD를 마치고 내부기능을 강화하기 시작했다. Refresh Token을 적용하고 Spring Actuator를 써서 지표를 가져왔고 Prometheus, Grafana를 써서 데이터를 시각화 하였다. 하지만 Prometheus Query를 사용하기 어렵다는 단점이 있어서 해결 방안을 찾다가 Spring Admin을 발견하여 적용하였다.
본격적으로 실전프로젝트를 시작하고 1주차가 지났다. 생각보다 서버 개발은 빠르게 끝나서 내부 기능 강화에 집중을 하고 있다. AOP와 Redis를 써서 날씨, 시세등의 API 호출횟수를 최소화 하고 Front 에서 사용할 통계데이터를 만들기 위해 Join을 사용하거나 Sum,Year,Month,Group By를 써서 월별로 데이터를 정렬하기도 했다. 또한 QueryDSL을 써서 데이터를 조회하기도 하였다. 그리고 멘토링을 하면서 Setter를 지양해야하는 이유, 유지 보수가 편한 프로젝트 관리등의 이유를 알수 있었다
AirBnb를 클론코딩하면서 여러가지로 배운것이 많았다. 특히 프로젝트를 진행하면서 시간을 지키지 못할경우 빠르게 일정을 제조정을 해야한다는 것과 팀원들간의 소통의 중요성등을 몸으로 체감한 주차라고 할 수 있다. 팀장이 아니라는 이유로, 피곤하다는 이유로, 낮설다는 이유로, 같은 팀원을 존중한다는 이유로 나의 할일을 끝내놓고는 프론트쪽의 진행사항을 많이 체크하지 않았고 ,일정을 제대로 세우지도 않았고 개발이 늦어저도 프론트 쪽을 제촉하거나 대책을 세우지 않은결과 백엔드 쪽에서 개발한 사항을 제대로 써 먹지도 못하고 마무리를 하게 되었다. 클론코딩을 마무리할때는 프론트쪽에서 개발이 늦어져 제대로 테스트를 못했고, 다른 벡엔드팀원들도 개발을 끝내자 테스트도 할 생각없이 나에게 다 맞겼다는것에 화가나기도 했다..
처음으로 React와 협엽을 하여 개발을 시작했다. 서버를 2개사용해서 개발을하는것은 처음이라서 여러가지 시행착오를 겪었다. 특히 로컬에서 테스트할때는 문제가 없었지만 배포하였을때 예상하지 못한 오류가 많이 발생하였다. 이 경험을 발판삼아 이번 클론코딩주차에는 더 완성도 높은 서버를 개발할 것이다.
항해에서 Spring과 React와 연동하는 첫번째 프로젝트를 시작했다. 프론트와 백엔드 서버를 분할하여 하는것은 처음이라 조금 혼란스럽긴 하지만 CORS,Proxy 설정을 통해 연동하는 방법과 OAuth2를 사용한 로그인과 인증하는방법. 특히 OAuth2에서 내가 원하는 정보를 OAuth2User정보에 담고 @AuthenticationPrincipal으로 불러올 방법을 성공하기도 했다. 그리고 Scope, 트랜잭션, Bean 생명주기 콜백 등 Spring 기초 내용도 공부하였다. 마지막으로 SSeEitter를 사용한 실시간 데이터 표시까지..... 생각보다 한주만에 얻은것이 꽤 많다고 느꼈다.
항해를 시작한지 벌써 4주차가 되었다. 이번 주차에서는 꽤 배운것이 많다. @Transactional에 대한 개념 사용법 트랜잭션에 대한 개념과 사용법, HTTP 구조, Jwt와 Refresh Token, Spring Security 사용법 그리고 ORM과 Hibernate, MVC 패턴 ,SQL 구조 Bean 등록 및 사용, @Qualifier @Primary 이미 알고 있는 내용도 있었지만 블로그에 쓰면서 개념을 다시한번 정리할 수 있는 시간이였다.
Spring이란? 스프링(Spring)이란 Java를 위한 오픈 소스 어플리케이션 프레임워크로써 동적인 웹 사이트를 개발하기 위한 여러가지 서비스를 제공하고 있다. Spring 특징 1. 경량 컨테이너(DI)로써 Java객체를 직접 관리한다. 객체의 생성, 소멸과 같은 라이프 사이클을 Spring에서 제어하여 사용자가 필요한 객체를 제공해 준다. 2. Plain Old Java Object 방식의 프레임워크이다. 특정 인터페이스를 구현하거나 상속받을 필요가 없어 기존에 존자하는 라이브러리등을 지원하기에 용이하다. ✱Plain Old Java Object : Java EE 등의 중량 프레임워크들이 등장하면서 무거운 객체를 만들게 된 것에 반발해서 사용하게 된 용어이다. 3. IoC(Inversion of ..