일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
- NooBLoL
- spring boot
- NaverCloudPlatform
- AssertJ
- docker
- Enum
- Naver Cloud
- Java
- papago
- ngrinder
- F-Lab
- Database
- Naver Cloud Platform
- 네이버 클라우드
- Pinpoint
- Thymeleaf
- object storage
- 회고
- 네이버클라우드
- 에프랩
- React
- mybatis
- OrientalUnity
- spring
- ncloud
- NCP
- DBDocs
- navercloud
- junit
- Scheduler
- Today
- Total
목록분류 전체보기 (82)
DevJong12
목차 글을 작성하기에 앞서서... 이 JUni이란게 뭔지에 대해서 앞의 아티클에 설명을 해놓았다. 해당글을 먼저 읽으면 좋을 듯하여 링크를 남겨놓는다.. https://devjong12.tistory.com/123 [JUnit] JUnit 이란?목차 1️⃣ 글을 작성하기에 앞서..사실 글을 적을까 말까 고민했는데, 회사에서 JUnit에 대해서 교육을 하게 될 계기가 생겨서 작성을 하다 보니 너무 많은 지식을 망각했다는 것을 깨닫게 되었devjong12.tistory.com 추가적으로 모든 코드는 아래의 Repository에서 확인이 가능합니다.https://github.com/donsonioc2010/my-junit-example GitHub - donsonioc2010/my-junit-exampleCo..
목차 1️⃣ 글을 작성하기에 앞서..사실 글을 적을까 말까 고민했는데, 회사에서 JUnit에 대해서 교육을 하게 될 계기가 생겨서 작성을 하다 보니 너무 많은 지식을 망각했다는 것을 깨닫게 되었다.. 잊으면 안되는데도... 심지어 최근에 코드를 작성할 일도 많이 없었어서 코드도 어떻게 작성하는거였지 하면서 약간씩 망각하게 되는걸 보고 잘쓰던거여도 기록을 해두자 생각을 하게 되어서 이렇게 글로 작성해두려 한다. 해당 시리즈는 JUnit에 대해서, 그리고 JUnit을 바탕으로 무엇을 할 수 있는지, JUnit의 응용방법, 라이브러리에 대한 소개를 진행할 예정이다.2️⃣ JUnit 그게 뭔데?JUnit이란 Java 프로젝트에서 단위 테스트를 진행하기 위한 프레임워크로, 코드의 작동 방식을 확인하고 변경으로 인..
결론부터 말하자면 사실 기뻐서 자랑하고자 쓴 글이다. 회사에서 성능테스트를 하면서 APM을 같이 붙여서 확인해 보고자 PinPoint를 같이 선택하였다. (편해서)도중에 Profiles설정을 해야할 일이 좀 생겨서 핀포인트 Client페이지에있는 Document와 Guide페이지를 참고하고있었다. 아래와 같은 페이지다. 해당 페이지에서, Pinpoint개발자가 작성한 Pinpoint 기술문서 가 아래의 이미지처럼 helloworld.naver.com으로 링크를 페이지탭을 추가하고 있었다.. 최근에 언제 한번 네이버 메일을 정리하면서 helloworld.naver.com의 도메인이 d2.naver.com으로 변경될 예정이라는 네이버 메일을 받은 적이 있던부분이 기억이 났고 도메인을 변경해서 링크를 실..
목차 1️⃣ 개요 회사에 입사하고 코드를 분석을 하고 있었는데, 도저히 분석만 하고 있을 수 없고 리팩토링을 진행할 수밖에 없는 환경이었다. 회사 코드를 보여줄수 없으나, 발생하는 문제가 비즈니스 로직이 20N + 1, 15N + 1 을 로직에서 직접 구현을 하고 있었다(아니 JPA를 쓰면서, 왜 이해를 못하고 쓰는데..) 그러다 보니 10개, 20개를 조회하는데도 쿼리가 200번, 400번 , 데이터가 좀 많으면 수만건의 Select절을 실행하고 있었다. 그리 생긴 결과물은, 데이터가 거의 없음에도 API의 요청이 10초~ 15초~ 20초~ 가지각생으로 매우매우 느린상황이었다. 그래서 내가 선언한 어노테이션이 달려있는 메소드들만의 실제 실행 시간을 확인해보고자 기능을 구현하게 되었다... APM등의 부..
목차 1️⃣ 개요 파일의 명칭에 대해서, 내가 간단하게 개발을 진행할 때 OriginalFileName에 대해서 저장을 하지 않았었다. 많은 웹사이트를 쓰면서 원본 파일명을 다시 돌려받은 경우가 거의 없다 보니, 신경을 쓰지 않았었으나 이와 관련되어 문제가 발생하여서 기록을 남겨보게 되었다. 환경은 JDK 17, Spring 3.2.0을 사용하였다. 2️⃣ 이슈내용 Window나 Mac에서 파일을 업로드를 하게 될 경우 들어오는 Multipart의 경우에는 별다른 문제없이 OriginalFileName이 기록이 되었으나, 이걸 DataBase에서 Query를 통해 OriginalFileName이 들어가있는 Column을 Like문으로 검색을 할 때 검색이 되지 않는 문제가 발생하였으며, 검색이 되지 않는..
목차 1️⃣ 개요 2023년을 돌이켜 보자면, "내가 이길이 맞나?"와 "계속 할 수 있을까?", 그리고 무기력이었던것같다. F-Lab이 끝난 이후, "나 그래도 열심히 했고, 이제 어느정도 잘 할수 있어라는 마인드"를 가지고 내가 주도적으로 해볼 가능성이 있겠다 싶은 회사에 취업을 했다고 생각했었다. 그리고 고생이란 쌩고생은 다했는데 3개월뒤 권고사직을 당했었을때, 내가 세상 보는 안목이 너무 없는거 같은데 계속 하는게 맞나 라는 생각을 좀 많이 했었다. 그리고 같이 찾아왔던게 정말 허탈해서 아무것도 하기 싫은 상태가 되버렸었다. 그냥 아무것도 하기싫었고, 실업급여나 받으면서 뭐하면서 살지 고민을 해보고 싶었던 시간이었다. 그럼 퇴사한 이후의 나에 대한 회고를 시작해보자 2️⃣ 네이버 클라우드 국비교육..
목차 1️⃣ 프로젝트 소개 프로젝트의 시작을 알리는 아티클에서 적었지만 또 적어보면... 번역을 기반으로 피해자와 가해자들의 모임인 한.중.일이라는 언어도 틀리고, 역사가 꼬여있는 세개의 국가를 주제로 동북아 커뮤니티이다 👉 깃허브 코드 아래 이미지처럼 글을 남길 경우 한국어, 영어, 일본어, 중국어 총 4개국어로 글들이 자동번역되어 타 국가의 사용자와 교류할 수 있는 커뮤니티다. 2️⃣ 구현에 사용된 기술스택 Front의 경우에는 React를 채택하였고, 메인으로 집을만한 라이브러리는 다국어의 페이지를 만들기 위한 i18next과 게시물의 내용을 HTML로 받기 위한 React Quill을 짚어볼 수 있을 것 같다. Back의 경우에는 Java + Spring을 기본으로 채택하였고, 추가적으로 짚어볼 ..
목차 1️⃣ 글을 작성하기에 앞서... 필자의 경우 BackEnd를 위주로 공부하다 보니 Spring, Java 코드들에 비해서는 깔끔하면서 능숙한 코드가 안나올 수도 있다. 그 점은 양해하며, 어떻게 작업을 했는지를 중점으로 봐주면 좋을 듯 하다.. 😭 2️⃣ 다국어 처리를 하게 된 이유 그리고 i18next 해당 프로젝트는 게시물을 작성 할 때 4개국어로 번역한 이후 저장이 되는 타 국가와 소통이 가능한 프로젝트이다. 정작 게시물은 4개국어로 저장이 되는데 반해, 페이지는 한국어로 계속해서 표현이 되면 부자연스럽다 생각하게 되었다. 이후 생각이 들었던 프로젝트의 방향은 다양한 사이트에서 봤던 기능인, 국가 변경을 했을 때 해당 국가의 언어에 맞게 페이지, 데이터가 변경이 되어야 겠다는 생각을 하게 되..
목차 1️⃣ 글 작성에 앞서... 해당 이슈는 우리 팀이 구현한 사용한 도구에 대한 이해가 필요하다. 일단 FrontEnd의 경우 React를 기반으로 작성을 진행하였으며, 이슈가 발생한 장소는 게시물을 등록하는 곳에서 발생이 되었다. 게시물을 등록시 필자의 팀의 경우에는 에디터를 사용하여 게시물을 등록할 수 있도록 기능 구현을 하였으며, 오픈소스중 하나인 React Quill을 활용하였다. Quill자체에는 이미지를 업로드하는 기능이 존재하였으나, 이미지를 업로드할때 발생이 되는 이슈사항에 대하여 기록을 해보고자 한다. 2️⃣ ReactQuill와 Quill을 선정한 이유? 1. ReactQuill이란? 공식페이지에서 소개되어있는 내용으로, 긴 텍스트를 작성할 수 있는 에디터라고 설명이 되어있다. 에디..
목차 1️⃣ 글을 적기에 앞서... 와...정말 보기힘든 기능구현 글이다..! 해당 포스트는 Naver Cloud에서 제공되는 서비스중 하나인 Java를 활용해 Papago Translation을 사용하는 기능구현 방법을 기록해 보고자 한다. 그 중에서도 Text와 HTML번역에 대하여 다룰 예정이다. 또한 필자의 프로젝트의 경우 한국어, 영어, 중국어, 일본어만 활용했다보니 언어가 지원이 안되는 경우는 한개의 케이스밖에 없었다. 여러개의 언어를 활용하면 서비스를 지원하지 않는 언어타입도 존재하니 주의하기 바란다. 2️⃣ Papago Translation API 1. API 이용 신청 먼저 API를 활용하기 위해선 사용부터 해야한다. 이용신청을 할 경우 다음의 이미지들이 뜬다. 생성 및 동의를 먼저 해주..
목차 1️⃣ 글을 적기에 앞서.. 해당 내용은 우리 팀에서 사용할 서버 환경을 구축하고자 할 때 발생했던 이슈의 내용을 기록한 글이다. 2️⃣ 이슈의 내용 아래의 이미지는 최초의 우리 팀의 인프라 아키텍쳐였다. 이미지부터 보는게 이해가 빠를 듯 하다. 다음 아키텍쳐의 문제는 다음과 같았다. Server에서 Object Storage, MySQL로의 Connection은 동일한 Private Zone이기 떄문에 정상적으로 이뤄졌었다. Server에서 Effective Log Search & Analytics, Papago로의 Connection은 Private Zone과 Public Area이기 떄문에 불가능했었다. 이 구간에 대한 통신을 어떻게 할지도, 생각도 못했던 부분이었으며, 실제로 어플리케이션을 ..
목차 1️⃣ Effective Log Search & Analytics란? 네이버 클라우드의 설명은 다음과 같으며, 역할은 그냥 로그수집기로, 일정 금액을 내면서 로그수집하는것이다. 2️⃣ 사용 이유 먼저 필자가 구성한 인프라 아키텍쳐를 확인이 필요하다. 아래의 이미지는 필자가 구축한 인프라다. 위의 이미지를 확인해보면 알 수 있듯이 Spring을 실행하는 서버가 3개다.. 즉 내가 로그를 확인하려면 일일이 Private한 서버에 직접 접속을 해서 Docker의 Container Log를 확인해야 하는 문제가 발생한다. 즉 귀찮다~ 이말이다. Log4j를 사용한 로그를 편하게 한곳에서 보고 싶다는 니즈를 만족하고자 Effective Log Search & Analytics를 도입해야겠다는 판단을 하게 되..
목차 1️⃣ 글을 시작하기에 앞서... 해당 글은 바로 적용할 수 없고 선수 과정으로 [OrientalUnity] PinPoint의 설치 과정이 이뤄져야 한다. 그 이유는 해당 작업은 Agent를 설정하는 것으로, PinPoint의 경우에는 Agent → Collector로 정보를 전달을 해주기 때문에 Agent의 정보를 수집해야 하는 Collector가 존재해야 하기 떄문이다. 위의 링크는 이러한 Collector, 그리고 가시적으로 확인이 가능한 Web어플리케이션을 실행하는 과정이니 먼저 확인하기 바란다. 또한 해당 글은 컨테이너 이미지로 빌드하고, 실행하는 Spring Boot Application에 PinPoint를 적용하는 과정이며 실제 클라우드환경이기 때문에, 유사한 환경에서만 참고하기를 바란..
목차 과거에 사용이력이 있어서 PinPoint를 적은줄 알았는데.. 적은 적도 없었을 줄은 몰랐다.. 1️⃣ PinPoint란? PinPoint는 어플리케이션 성능 관리(APM) 도구 중 하나로, 분산 시스템 환경에서 애플리케이션의 성능을 모니터링하고 분석하는 데 사용된다. 특히 대규모의 분산 어플리케이션 및 MSA에서 성능의 문제를 식별하고 해결하는데 도움을 주는 도구이다. 이건 그냥 GPT한테서 받은 대답으로, PinPoint는 어플리케이션에 대한 성능관리로 하기 4가지의 기능을 제공한다. 모니터링: Pinpoint는 애플리케이션의 성능 데이터를 실시간으로 수집하고 모니터링합니다. 이는 서버, 데이터베이스, 네트워크, HTTP 요청 및 기타 리소스와 관련된 성능 지표를 추적하는 데 도움이 됩니다. 추..
목차 프로젝트 정보 및 발표영상 이 글을 작성할 당시에 프로젝트는 완성이 되었다 보니... 프로젝트 링크를 달게 되었다.. 사실 프로젝트를 진행하면서 꾸준히 회고글이라든가 프로젝트를 진행중인 내용의 글을 작성하고 싶었으나... 변명이겠지만 자느라 바빴다...🤣 처음에 내 얼굴이 바로나오다 보니까...민망해서.. 난 영상을 제대로 보지를 못했다 https://github.com/hook-killer 물음표살인마 개발을 함에 있어 항상 왜?를 서로에게 질문하며 곤란하게 만들자는 의미의 팀명입니다. 물음표살인마 has 4 repositories available. Follow their code on GitHub. github.com HTML 삽입 미리보기할 수 없는 소스 1️⃣ 팀 결성? 사실 나는 해당 프..
목차 💡해당 페이지에서 모든 메일 실행 로직에 대해서는 Thread.sleep(500)으로 대체하였다. 이유는 메일을 발송함에 있어 한계가 존재하나, 실제 걸리는 시간은 약 500ms~1000ms로 확인하였기 떄문에, 성능 테스트에까지 굳이 메일 API를 확인할 필요는 없다고 판단하였다. 💡메소드는 스케쥴러 메소드 한개만을 기준으로 작업을 진행하였다. 개요 아래의 게시물에서 지난번에 MailService와 연결한 코드를 볼 수 있다. 메일서비스와 연계하면서 메일 시간에 대해서 측정을 하고 보니, 많은 양의 게시물의 상태값을 변경하고자 하면 너무나도 오랜시간을 Scheduler메소드가 잡혀있으면서, 상태값이 변경되지 않는 문제를 장애로 인식을 해볼 수 있게 되었다. [Picasso][Spring] @Sch..
목차 개요 💡해당 게시물은 Scheduled API를 뜯어보는 게시물이 아니다. 필자가 필요한 만큼만 활용을 하였다. 프로젝트를 제작함에 있어서, 올라온 게시물이 경매시작일인 경우 경매를 시작하거나 유찰이 되도록 상태값을 변경하고, 사용자한테 메일을 발송해야 하는 로직이 존재하였다. 상태를 변경함에 있어서 Database의 Event Scheduler를 활용하는 것도 방법이 될 수 있었다. 하지만 그건 결코 좋은 방법이 아니라고 필자는 생각했고, 첫번째로는 그래봐야 메일도 제시간에 보내야 하는것이었고, 두번째로는 해당이유가 대부분의 이유를 차지하는데 Database에 의존을 해야 하게 되는 문제가 발생하기 떄문이다. Database에 의존을 해버리게 되면 추후 Database를 MySQL에서 Oracl..
목차 개요 이번에 프로젝트를 진행하면서 프로젝트 내부에서 보내야 하는 메일 종류가 매우 많았다. 가벼운 생각만으로도 5종류가 넘었는데, 깊게 생각하고 보니 10종류가 넘어갔다. (실제 시간이 부족해서 구현한 메일은 사실 6개인가 밖에 안되는건 안비밀) 어쨋든... 그러다 보니 여러종류의 메일에 대처를 해야 했고, 템플릿화 해서 메일을 관리하는 수밖에 없었다. 내가 템플릿화하여 어떻게 진행하였는지를 기록해 보고자 한다. 추가 의존성 다음 두가지를 추가하였다, 필자는 Thymeleaf를 사용해 thymeleaf용 html을 미리 template화 하는데 활용하였으며, 메일 발송을 위한 spring-boot-starter-mail을 추가하였다 implementation 'org.springframework.b..
목차 개발 개요 별다른건 없고..Naver Cloud의 Object Storage를 개별로 Upload Util을 만들걸 생각하니까 머리가 지끈거려와서 공통기능으로 추출해주고 사용하면 좋을 것 같다고 생각하여 제작하였다. 추가적으로 한개의 버킷에서 dev/~, local/~ 형식으로 경로를 나눠가며 활용을 하고 싶었다. 이에 따른 코드를 공유해 보고자 한다. 의존성 추가 Common-io의 경우 확장자를 편하게 추출하기 위해 활용하였다. 또한 amazone의 aws-java-sdk의 경우 Naver Cloud에서는 Object Storage에서 오픈소스로 제작을 한 부분이다 보니 그대로 사용이 가능하였다. //File api 'commons-io:commons-io:2.13.0' // Amazon AWS..
목차 해당 프로젝트의 경우 CI 와 CD를 전부 Github Actions를 활용하였다. CI와 CD에 사용된 Github WorkFlows를 작성해 보고자 한다. 먼저 사전에 도움이 되라고, 내 프로젝트의 아키텍쳐이미지를 남겨논다. 1) CI 먼저 CI가 해당 프로젝트에서 왜 필요했을 까?부터 정의를 해보고자 한다. 필자의 프로젝트는 6명이 팀으로 있었고, 대부분이 Git에 미숙한 상황이었다. 하지만 Merge는 안전하게 진행해야 한다고 판단을 내렸으며 이에 따라, Build가 되지 않고 파일이 증발하는등의 위험한 PR을 솎아 내야 한다는 문제가 있었다. 해당 문제를 해결하고자 CI를 도입하였고, Build가 되지 않으면 CodeReview를 Approve하지 않고 Merge를 진행하지 않는 방법을 채..