본문 바로가기

분류 전체보기533

이팩티브 자바 따라하기 요즘 여유가 생겨서 한달 전에 사놨던 이펙티브 자바를 읽기 시작했다. 책에는 아이템이 90개 정도 있는데 1번 부터 순서대로 읽어보고 내 블로그 만들기 프로젝트에 적절한 내용이면 아이템들을 적용하는 방식으로 공부하려고 한다. 하루에 아이템 3개씩 하면 괜찮지 않을까 예상해본다. 일반 자바 책보다 내용이 깊고 생각해야할 부분이 많아서 아이템 3개도 많다. 유지만 하면 30일 만에 책 한권을 끝낸다는 목표이다. 아이템 1. 생성자 대신 정적 팩터리 메서드를 고려하라 -> 이미 전부다 빌더 패턴을 사용하고 있어서 생성자는 사용하고 있지 않다. -> 기본 생성자는 사용하지 않는 경우 protected로 설정해서 사람들이 해당 클래스는 생성할 수 없다는 것을 인식하도록 하자. 아이템 2. 생성자에 매개변수가 많다.. 2023. 8. 11.
LIS 알고리즘 DP로 풀면 간단하지만 시간 복잡도가 N^2이 되어서 N이 10000이 넘는 순간 복잡도가 100만이 넘어가면서 문제 제한 시간을 통과하지 못한다. DP로 문제를 해결하는 경우 아래와 같이 이중 for문으로 현재 위치보다 낮은 인덱스 중 가장 큰 dp에 1을 더해서 현재 dp와 비교 후 적용하는 방식으로 진행하면 된다. 백준 11053 if __name__ == '__main__': N = int(input()) lst = list(map(int, input().split())) dp = [1 for i in range(N)] for i in range(N): for j in range(i): if lst[i] > lst[j]: dp[i] = max(dp[i],dp[j]+1) print(max(dp)) .. 2023. 8. 9.
Jest 테스트 작성법 테스트 설계 및 방향 Controller -> Service -> Repository 현재 KLUB 프로젝트는 설계 방향은 위와 같이 Controller에서 Service를 호출하고 다시 Service에서 Repository를 호출하는 방향으로 설계되어 있습니다. Jest로 테스트를 진행할 부분은 Controller와 Service 파일인데 Controller를 테스트하는 경우 Controller 자체의 기능에 집중하기 위해서 Service를 모킹하고 Service를 테스트하는 경우 Repository를 모킹함으로써 격리된 환경에서 테스트를 진행할 수 있습니다. klub 프로젝트는 프론트에서 e2e 테스트를 진행해주기 때문에 백엔드에서는 통합 테스트를 보다는 단위 테스트를 먼저 진행합니다. Jest로 진.. 2023. 7. 27.
git action을 이용한 자동 배포 처음에는 젠킨스를 통해서 자동 배포를 하려 했으나 배보다 배꼽이 큰 느낌이 나서 더 간단하게 자동 배포를 할 수 있는 git action을 사용하기로 했다. 젠킨스를 사용하려면 프리티어 메모리로는 용량이 부족해서 swapfile을 만들어서 메모리 자원을 늘리는 방식으로 진행하였다. gui 환경에서 편하게 배포를 관리할 수 있었으나 아무래도 조금 개인 프로젝트에서 사용하기에는 부담스러웠다. 젠킨스는 아래 블로그를 참고하였다. https://velog.io/@appti/Jenkins-CodeDeploy%EB%A5%BC-%ED%99%9C%EC%9A%A9%ED%95%9C-EC2%EC%97%90-%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B6%80%ED%8A%B8-%ED%94%84%EB%A1%9C%.. 2023. 7. 23.
Jwt 적용하기 블로그 만들기 프로젝트에서 Jwt를 어떻게 생성하고 사용하는지를 공유하려고 한다. 처음에는 자바 스프링을 시작하면서 Jwt를 사용하려 했지만 코드를 작성해야하는게 많고 어려워서 쿠키,세션으로 로그인 기능을 구현했었다. 쿠키, 세션으로 로그인을 구현하는 방법부터 설명하겠다. Cookie idCookie = new Cookie("memberId", String.valueOf(loginMember.getId())); response.addCookie(idCookie); 코드는 위와 같이 키 값으로 적당한 변수를 만들어 넣어주고 보내주면 사용자가 해당 쿠키를 받아서 사용자의 권한으로 로그인할 수 있었다. 그러나 요즘에는 쿠키를 잘 사용하지 않는다고 한다. 이유는 다음과 같다. 보안 문제 -> https://le.. 2023. 7. 5.
aws 비용 줄이기 처음에는 내 코드가 문제인가 싶어서 base64로 저장하던 이미지를 s3 서비스에 저장하고 이미지 미리보기를 한번에 모두 가져오던 것을 한 페이지씩 가져오는 등 노력을 쏟아부었는데 한달에 오천원이던 비용이 오히려 한달에 2만원 가까이 비용이 올라갔다. 결국 청구서를 하나씩 세세하게 뜯어 보았다. 첫번째로 로드 밸런서에서 거의 만원 가까이 나갔다. 로드 밸런서는 프리티어를 사용하면 750시간이 무료인데 왜 돈이 만원이 넘게 나갔을까 확인하다가. 프론트와 백엔드를 각각 로드밸런서를 설정해서 2개의 로드밸런서를 생성했기 때문에 750시간을 넘어서 하루에 각각 500원씩 추가되어 한달에 마지막 15일동안 만오천원이 결제되는 것이었다. https를 프론트, 백엔드로 나눠서 각각 로드밸런서를 적용해야 하는 줄 알았.. 2023. 7. 4.
홍대 멀티플러스 탐방 친구들 데리고 홍대 멀티플러스 점에 갔다. 원래는 링피트 하려고 강남에 어떤 멀티방에 가려고 했는데 스케줄이 안맞아서 홍대에 놀러갔는데 생각보다 너무 저렴하고 쾌적해서 좋았다.. 스위치로 피코파크를 하려고 했는데 아쉽게도 피코파크 게임은 없어서 마리오 파티랑, 마리오 카트를 하는데 캐릭터들이 너무 귀여웠다... 나는 지브리에 거미 할아버지 닮은 캐릭터만 했는데 뭔가 팔이 길어보여서 유리해보였다. 마지막으로 도쿄 올림픽을 했는데 도쿄 올림픽이 제일 재밌었다. 배드민턴으로 진 팀이 팝콘 사기를 했는데 우리팀이 졌지만 또 가위바위보로 한 사람이 사기로 해서 결국 난 공짜로 얻어먹었다. 다음에는 다른 멀티방에 도전해봐야겠다.. 너무 저렴해서 좋았다.. 2시간 노는데 만원밖에 안든다.. 게다가 과자도 무한리필이라.. 2023. 7. 1.
스프링과 nestjs의 차이점 1. 의존성 관리 스프링과 nestjs를 사용하면서 가장 크게 느낀 차이점은 의존성 주입 부분이다. 자바 스프링은 빈을 통해서 알아서 의존성 주입을 해주기 때문에 사용자가 딱히 뭔가 할 필요가 없다. 하지만 nestjs에서는 모듈 파일에서 imports, providers, exports를 하나씩 배열에 등록하면서 사용자가 직접 의존성 주입을 하는데 뭔가 불편하다. 2. 객체 이중 참조 자바 스프링에서는 요즘에는 JPA를 사용하는데 그냥 엔티티 간에 이중 삼중 참조를 해도 JPA에서 알아서 SQL 문을 날려서 원하는 데이터를 가져오는데 nestjs에서는 체이닝이 한번만 가능하다. 그래서 객체를 모두 따로 가져와서 데이터를 가공하는 과정이 추가되기 때문에 불편하다. 3. 비동기 vs 동기 nestJs는 주.. 2023. 7. 1.
정규 표현식 정규 표현식 정규 표현식(Regular Expression 또는 Regex)은 문자열 패턴을 나타내기 위한 형식 언어입니다. 정규 표현식은 텍스트에서 특정 패턴을 찾거나 매칭하는 데 사용됩니다. 정규 표현식은 다양한 메타문자, 문자 클래스, 반복자 등의 특수한 기호와 조합으로 구성됩니다. 각각의 기호는 특정한 의미를 가지며, 특정 패턴을 표현하기 위해 사용됩니다. 일반적으로 정규 표현식에서 사용되는 몇 가지 기호와 용어는 다음과 같습니다: 메타문자(Metacharacters): 정규 표현식에서 특별한 의미를 가지는 문자로, 예를 들면 ".", "^", "$", "*", "+", "?", "{", "}", "[", "]", "(", ")" 등이 있습니다. 문자 클래스(Character Class): 대괄호.. 2023. 6. 30.