일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- NaverCloudPlatform
- docker
- 에프랩
- F-Lab
- Thymeleaf
- React
- object storage
- navercloud
- mybatis
- AssertJ
- Java
- spring
- 회고
- ncloud
- Naver Cloud Platform
- Scheduler
- NooBLoL
- spring boot
- 네이버 클라우드
- Database
- papago
- Naver Cloud
- DBDocs
- Pinpoint
- OrientalUnity
- 네이버클라우드
- NCP
- junit
- Enum
- ngrinder
- Today
- Total
목록Java (28)
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 프로젝트에서 단위 테스트를 진행하기 위한 프레임워크로, 코드의 작동 방식을 확인하고 변경으로 인..
목차 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️⃣ 글 작성에 앞서... 해당 이슈는 우리 팀이 구현한 사용한 도구에 대한 이해가 필요하다. 일단 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️⃣ 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..
목차 개발 개요 별다른건 없고..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..
목차 와이어 프레임과 디자인을 정말 허접하게 한채로 진행하였다... 일단 내 목표는 프로젝트 경과에 대한 기록들이기 때문에 글들을 올려두긴 하는데... 많이 민망하다... 그렇기에 아무 내용없이 이미지만 올리도록 하겠다... (도망쳐) 해당 챕터는 재미로 봐주면 좋을 것 같다. ㅎㅎ;;;; 메인페이지 회원가입 경매품 등록 및 경매품의 관리자 승인 페이지 경매품의 상세 정보 및 입찰 페이지 포인트 전환(결재) 마이페이지 및 내 경매 내역에 대한 조회 많이 민망한 페이지인데... 6명 팀인데 6명모두 백엔드의 피가 흘럿나보다... 디자인이 모두 젬병이었다..흑흑흑... 이쁘게 꾸미는 사람들... 필자는 개인적으로 존경한다...
목차 프로젝트 링크 Picasso 경매 예정작 NEW more picasso.jong1.com GitHub - donsonioc2010/picasso: temp name temp name. Contribute to donsonioc2010/picasso development by creating an account on GitHub. github.com 1) 계기 및 개요 내가 코드에 대해 재밌는 요소를 많이 많들어 볼 수 있을만한 소재의 토이프로젝트로, 간단한 미술품 경매 사이트를 만들어 보는것을 해봤다. 해커톤의 개념으로 짧은 기간 개발을 진행해야 했고, 전체적인 팀의 코드관리까지 도맡아 진행했었다. 2) 개발 기간 및 역할 23년 09월 13일 부터 시작하여 23년 09월 27일까지 정확히 약 2주..
테스트 코드에 대한 소개 TDD에 대해서 1.TDD와 단위 테스트(Unit Test)는 다르다. 2. TDD는 테스트가 주도하는 개발로 테스트 코드를 먼저 작성하는 것에서부터 시작한다. TDD의 사이클링 순서 Red - 항상 실패하는 테스트를 먼저 작성 Green - 테스트가 통과하는 프로덕션 코드를 작성 Refactor - 테스트가 통과하면 프로덕션 코드의 리팩토링 단위 테스트 기능 단위의 테스트 코드를 작성하는 것 TDD와 다르게 테스트코드를 먼저 작성하지도 않으며 리팩토링도 포함되지 않고 순수히 테스트 코드만 만드는 것을 의미한다. 테스트 코드를 작성하는 이유 단위 테스트는 개발단계 초기에 문제를 발견하도록 도와준다. 단위테스트는 개발자가 나중에 코드를 리팩토링 하거나 라이브러리에 업그레이드등에서 ..
개요 프로젝트의 기능 개발은 완료되었다 보니 부하테스트를 진행해보고자 nGrinder를 설치해보고자 하였다. 이포스트는 nGrinder의 Controller와 Agent의 설치과정을 작성하였다. nGrinder란? 어플리케이션의 부하 테스트 용도로 많이 사용되는 툴중에 하나로 nGrinder는 Controller와 Agent로 구성이 되어 있으며 두개를 같은 서버에 설치해도 되고 서로 다른 서버에 설치를 해도 된다. ※ 부하테스트이다 보니 추천하는건 서로 다른 서버에 설치를 하는 것을 추천하며 Agent는 어플리케이션이 존재하는 서버에 설치해야 한다. ※ 공식문서에서 3GB의 Free Memory라는 문구를 봤던 것 같은데 다시 찾으려니 못찾겠다.. 해당 문구를 보고 새 Controller서버를 분할 하..
내가 프로젝트를 제작하면서 int를 대신하여 Integer를 사용하는 경우가 많았다. 보통의 경우라면 숫자를 사용할 때 int를 사용하겠지만 Integer를 사용했던 이유는 int의 경우에는 Null에 대한 표현이 불가능하지만 Integer의 경우에는 Null을 담을 수 있기 때문에 애용을 했다. Integer를 사용하면서 int를 사용할 때는 없던 equals가 존재했고 equals와 ==의 차이점에 대해서 알게되어 추후라도 Integer를 사용할 때 주의를 하고자 한다. 문제의 내용 먼저 코드를 보여주면서 문제를 보고자한다. 1 2 3 4 5 6 7 8 9 10 Integer integerA = 1000; Integer integerB = 1000; int intA = 1000; int intB = ..
개요 프로젝트의 기능 구현을 하면서, 회원가입을 진행 할 때 메일을 발송해서 인증을 진행하는 기능을 제작하게 되었다. 문자열이 많지 않다 보니 메소드에서 String으로 제작을 진행하고 있었으며, SimpleMailMessage를 활용해 내용을 제작한 이후, JavaMailSender를 통해 발송을 하고 있었다. 기존 소스의 문제점 크게 두가지의 문제점이 존재했다. 1. HTML형식으로 메일이 오지를 않고 모두 문자열로 인식. 2. 메소드에서 내용을 제작하다 보니 내용의 수정이 필요할 경우 무조건적인 소스코드의 수정 기존코드로직 메일 발송을 담당하는 메소드 받아온 내용들을 SimpleMailMessage에 담아 발송한다 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19..
개요 프로젝트를 진행하면서 UPSERT에 대하여 알게 되어, 게시판기능에 대하여 제작을 하면서 사용해볼 기회가 생겨서 활용하게 되었다. 기능 구현의 완료 이후 테스트를 진행하면서 지속적으로 JdbcSQLSyntaxErrorException가 발생하였다. 해당 문제에 대한 포스트를 남기고자 한다. 프로젝트 기술스택 JDK 11 Spring Boot 2.7.2 Mybatis MariaDB, H2 사용 쿼리, 설정 사용중이던 DB url url: jdbc:h2:tcp://localhost/~/h2/nooblol 문제가 발생한 쿼리는 다음과 같다. INSERT INTO bbs_articles(article_id, bbs_id, article_title, article_read_count, article_cont..
개요 현재 기능 구현을 진행하면서 로그인을 임베디드된 톰캣에 세션으로 정보저장을 하고자 HttpServletRequest를 받아야 하는 메소드를 제작을 하였는데, 해당 기능에 대해서 테스트케이스를 제작을 하고 싶었다. 일반적인 Object의 경우라면 Mock을 사용하면 되지만 HttpServletRequest, Response도 가능한가? 생각하면서, 찾아서 알게된 MockHttpServletRequest와 MockHttpServletResponse에 대해서 기록하고자 한다. 참고한 자료는 아래의 북마크이다. https://www.baeldung.com/java-httpservletrequest-mock How to Mock HttpServletRequest | Baeldung Learn multiple..