본문 바로가기

분류 전체보기84

Spring Boot AWS S3 연동 진행하던 프로젝트에서 정적 이미지를 업로드 하는 기능이 필요하여 가장 많이 사용하는 AWS S3를 어떻게 구성하고 사용했는지 공유하려고 합니다. 🤔어떤 S3를 사용할까? S3는 AWS뿐만아니라 대표적으로 MS, Google 등 많은 곳에서 제공하고있습니다. 그중 AWS를 사용하기로 결정한 이유는 다음과 같습니다. 클라우드 서비스 중 AWS를 사용한적이 없습니다...(Naver Cloud Platform, GCP) 등 사용한 적이 없어 이번엔 AWS와 친해보려고 합니다. 많은 기업들이 사용하고 있습니다. 1년동안 무료로 사용할 수 있습니다. AWS의 S3로 결정하고 정보를 찾던 도중 GCS는 월 5G까지 무료라고... 하지만 이번엔 1년동안 AWS와 친해져서 익숙해지려고 합니다. S3같은 서비스를 사용하는.. 2021. 10. 22.
페이지네이션 어떻게 처리해야 할까요? 피드를 개발하던 도중 페이징 처리에 대해서 고민을 하게되었습니다. 페이징은 크게 2가지로(offset 방식, cursor방식) 볼 수 있습니다. 각각의 장단점을 파악한 뒤 해당 프로젝트에서는 왜 cursor방식으로 선택했는지 공유해보고자 합니다. offset방식은 offset과 limit를 기준으로 DB에서 특정부분 데이터를 가져오는 방식을 말합니다. 그래서 sql쿼리를 보면 다음과 같습니다. SELECT * FROM Feed ORDER BY updated_at DESC LIMIT 0, 10;그래서 해당 프로젝트에서는 JPA를 사용하기 때문에 JPA에서 제공하는 pageable을 사용하여 손쉽게 페이징처리를 하였습니다. PageRequest pageRequest = PageRequest.of(pageIn.. 2021. 9. 30.
Spring rest docs를 사용한 API문서화 🤔Swegger대신 Spring Rest Docs를 왜 사용하나요? 일단 Swegger와 Spring Rest Docs를 왜 사용해야 할까요? 백엔드 개발의 주된 일은 바로 Api를 제공하는 일 입니다. Api를 프론트 개발자에게 전달한다는 것은 수 많은 대화가 필요하다는 것을 의미합니다. 이러한 대화를 조금이라도 줄인다면 더 많은 성과와 업무 효율을 극대화 할 수 있습니다. 따라서 백엔드 개발자는 Api문서를 제공하여 파라미터 설명, 요청 url, 응답 형식 등을 알려주어 해당 Api를 사용할 개발자들에게 알려줄 의무가 있습니다. 주로 Java 진영에서는 Swegger, Spring Rest Docs를 사용하여 Api 문서를 제공합니다. 우선 Swegger, Spring Rest Docs의 특징을 비교.. 2021. 9. 21.
ngrinder로 성능 테스트 Ngrinder 설치 Controller 설치 ngrinder는 네이버에서 만든 오픈소스임으로 github에서 wget을 통해 다운로드 받습니다. 우선 자바를 설치 후 해당 war파일을 실행합니다. ngrinder를 실행하면 기본 포트인 8080으로 접속하시면 됩니다. ID, PW는 admin으로 기본 설정되어있으며, 보안 상 PW는 변경합니다. 실행 시 github을 확인해보면 MaxPermSize를 설정해줍니다. MaxPermSize는 java 8부터는 사용하지 않습니다. 사용하지 않는 이유는 해당 포스팅에서 벗어나는 내용 같아 참고링크로 대신하겠습니다. 해서 MaxPermSize를 설정하지 않고 바로 실행하였습니다. java -jar ngrinder-controller-3.5.5-p1.war -p .. 2021. 8. 19.
Logging Framework는 어떤게 좋을까? 프로그램 개발을 할때 중요한 요소 중 한 부분은 바로 로깅 처리입니다. 어떤 로깅 프레임워크를 사용할지, 로그레벨 정책은 어떻게 가져갈지 등에 대한 고민은 개발을 들어가기전 결정해야 됩니다. 최근 읽고있는 자바 성능 튜닝이야기 책을 통해 Log4j, Logback을 알게되었고 앞으로 진행해야될 프로젝트에 어떤 로깅 프레임워크를 적용할지 결정하려고 합니다. 자바에서는 Log4j → Logback → Log4j2 시간 순으로 로깅 프레임워크가 나왔습니다. 이들 중 각각의 성능을 비교해보도록 하겠습니다. Log4j 첫 로깅 프레임워크이며 그래서인지 SLF4J를 기본적으로 지원하지 않습니다. 그래서 별도의 의존성 slf4j-log4j12를 설치해야 합니다. 또한 2015년 말 이후로는 더 이상 업데이트를 하지 .. 2021. 8. 16.
Jenkins를 사용한 CD 구성 각종 단위테스트, 빌드 테스트 등을 통과한 검증된 코드들은 실제 운영서버에 배포되어야 합니다. 이를 자동화 하기위해 Jenkins를 사용하였습니다. 이번 포스팅은 Jenkins를 사용하여 CD를 구현한 내용에 대해서 정리글이 될 것 같습니다. 🤔 서버에 배포 시 어떤 방식을 사용해야하나? 제가 생각했을 때 배포 방식은 크게 2가지 였습니다. 깃헙에 있는 코드를 clone하여 build후 실행시키는 것을 자동화하자 도커파일을 만들어서 도커허브에 올려둔 후 각 서버들은 pull받아 사용하자 결론적으로는 2번을 선택하여 배포를 하였습니다. 2번은 선택한 이유는 배포할 서버에 소스코드를 배포한다는 부분이 보안적으로 미흡하다 판단하였고, 빌드로 인한 서버쪽이 지저분해질 것 같았습니다. 또한 서버에 환경구성할 때 .. 2021. 8. 12.
Redis Cache를 이용한 애플리케이션 성능 향상시키는 방법 캐싱이란 무엇인가 오랜 시간이 걸리는 작업의 결과를 저장해서 향후 동일한 요청 시 시간과 비용을 단축시키는 기법입니다. 고성능 애플리케이션을 만드는데 가장 중요한 포인트 중 하나입니다. 캐싱의 종류 및 비교 캐싱에는 크게 로컬캐싱과 글로벌 캐싱으로 나누어서 생각해볼 수 있습니다. 로컬 캐싱 : WAS 서버에서 사용 글로벌 캐싱 : 별도의 캐시 서버를 둬서 사용 로컬캐싱 vs 글로벌 캐싱 항목 로컬 캐싱 글로벌 캐싱 저장위치 애플리케이션 서버에 저장 별도의 캐시 서버에 저장 데이터간 공유 다른 서버에서 참조하기 어려움 서버간 데이터 공유 쉬움 Memory, Disk 사용 애플리케이션 장비와 공유 별도의 서버를 사용함으로 해당 서버의 리소스를 모두 사용가능 캐시 데이터 변경 시 - 해당 서버를 제외하고 모든.. 2021. 8. 11.
Jenkins를 사용한 CI 구성 젠킨스의 설치 과정은 공식사이트에 잘 설명되어 있으니 설치방법에 대해서는 링크로 대신하겠습니다. Jenkins를 설치했으면 정상적으로 서비스가 동작하는지 확인합니다. sudo systemctl start jenkins sudo systemctl stop jenkins sudo systemctl restart jenkins Jenkins는 기본 포트가 8080이며, 혹시라도 접속이 안될 시 방화벽을 확인합니다. CI를 사용할 프로젝트를 생성합니다. 생성 시 Pipeline을 선택합니다. 그리고 Github에 pull request를 수신하기 위해서는 플러그인을 설치해야 합니다. GitHub Pull Request Builder 플러그인을 설치합니다. 플러그인을 설치 후 아까 만들어둔 프로젝트 설정으로 돌아.. 2021. 8. 5.
CI/CD 왜 필요한가? 진행하고 있는 프로젝트에 여러 기능들이 들어감에 따라 실제 서버에 배포하여 성능 테스트 및 개발을 동시에 진행해야 될 상황이 되었습니다. 그래서 지금까지는 Local 환경에서 테스트하고 개발하였지만, 이제는 실제 서버 환경에 배포도 하고 개발한 내용을 지속적으로 반영하는 등 CI/CD 작업이 필요해 보였습니다. CI..? CD..?🤔 우선 처음 CI, CD를 처음 사용해보는 것 이어서 개념을 정리하려고 합니다. CI (Continuous Integration) 지속적인 통합.. 왜 해야 할까요?? 많은 개발자들이 개발을 할 때 이젠 필수적으로 사용하는 것이 있습니다. 바로 버전 관리 툴(Git, SVN)입니다. 개발자들은 버전 관리 툴을 이용하여 기능별 feature를 만들고 개발하고 머지를 반복합니다... 2021. 8. 5.