전체 글(313)
-
[프로그래머스 스쿨] 알고리즘 - 1
그리디 알고리즘 수학적 논리로 풀어야 하는 문제들이었습니다. 전기 요금을 최소로 쓸 수 있는 경우의 수를 모두 구한다거나, 모든 집에 전기를 공급하기 위해 기지국을 어디에 세워야 최소 개수를 세울 수 있는지에 대한 문제 말이죠. 그리디 알고리즘은 모든 경우의 수를 알아봐야 하기 때문에 알고리즘 공식보단 규칙을 찾아 공식화 하고 코드로 나타내는 점이 중요합니다. 따라서 여러 문제를 풀어보고 접근 방식을 정리해야 데이터가 쌓여 비슷한 유형을 풀 수 있을거라 생각됩니다. 정리한 것을 토대로 주기적으로 푼 문제들을 다시 풀어보면 그리디 알고리즘 풀이 능력이 꾸준히 늘 것입니다. 1. 기지국 설치 기지국은 전기를 공급하는 범위인 W를 가집니다. 범위는 기지국이 설치된 인덱스 양 옆 W만큼 전기를 공급합니다. 그리..
2023.06.28 -
Java Parallel Stream(병렬 스트림)
Parallel Stream(병렬 스트림) 회사 코드 리뷰를 하던 중 팀원이 parallel stream을 사용하신 것을 봤습니다. 문서를 보니 여러 스레드를 병렬로 실행해 성능이 높아지는 원리라고 인지했습니다. 그리고 나서 foreach문에 적용해봤는데 성능이 약 5배 가까이 좋아지는 것을 보고 동작 원리를 자세히 알아보았습니다. 본 글의 주된 내용은 참고자료 링크에 표기된 oracle 사 Java Magazine을 참고했습니다. Stream의 두 종류 sequential stream : 싱글 스레드를 사용해 element를 순차적으로 처리. 싱글 코어 CPU 사용. parallel stream : stream을 여러 substream으로 나눠 처리. 멀티 스레드를 사용해 stream 파이프 라인을 실..
2023.05.28 -
블루 그린 무중단 배포 적용기
블루 그린 배포방식 적용기 AWS blue-green 이유: 사내 AWS ec2 인스턴스와 ELB(Elastic Load Balance) 사용중 Auto Scaling 전통적인 DNS 방식보다 세분화 돼있지 않지만, Auto Scaling groups를 설정해 실행할 수 있단 장점이 있습니다. health checks를 통해 비정상적 인스턴스가 있으면 새 인스턴스를 구동해 maximum 인스턴스를 유지합니다. 배포할 때 green 인스턴스를 ELB(Elastic Load Balancer)에 추가해주면 LB는 green 인스턴스를 선호하기 때문에 트래픽을 green 인스턴스로 보냄 green 인스턴스를 Auto Scaling group에 추가할 때 blue 인스턴스는 종료하거나 스탠바이 상태에 둡니다. 롤..
2023.05.09 -
회사 테스트 코드 도입기
회사에 테스트 코드가 있지만, 프로젝트를 진행하면서 작성하지 않고 있어 새로운 프로젝트를 들어가며 이번엔 테스트 코드를 작성하기로 팀원과 결정했습니다. 도입에 앞서 고민했던 점들과 어떻게 도입했는지를 한번 정리해봤습니다. 테스트 코드를 적용해야 하는 이유 코드에 신뢰성이 생긴다. 리팩토링이 쉬워진다. 테스트 코드를 적용하기 위한 준비 테스트 단위 테스트를 어떤 범위까지 진행할지 선택. 예를 들어 단위 테스트, 통합 테스트, end-to-end(e2e) 테스트 테스트 방법론 의존성이 걸린 클래스일 때 mock을 적극적으로 사용할지, 실제 인스턴스를 활용할지 선택한 방법 mock은 비즈니스 로직 검증이 어려워, 회귀 방지가 낮다고 생각했습니다. 따라서 mock보다 실질적인 인스턴스 테스트를 진행하기로 했습니..
2023.04.27 -
[JPA] 프록시와 지연 로딩
프록시와 연관관계 관리 객체가 DB에 저장되어 있으므로 연관된 객체를 자유롭게 탑색하기 어렵습니다. JPA 구현체들은 이 문제를 해결하기 위해 프록시라는 기술을 사용합니다. 프록시를 사용하면 연관된 객체를 처음부터 DB에서 조회하는 것이 아니라, 실제 사용하는 시점에 조회할 수 있습니다. 하지만 자주 함께 사용되는 객체들은 조인을 사용해서 함께 조회하는 것이 효과적입니다. JPA는 즉시 로딩과 지연 로딩이라는 방법으로 둘을 모두 지원합니다. 지연 로딩 Member 객체가 Team 객체를 @ManyToOne으로 참조하고 있을 때, Member 객체가 Team 객체와 관련된 정보를 사용하지 않는다면 연관된 Team 엔티티까지 함께 조회하는 것은 효율적이지 않습니다. 이런 문제를 해결하기 위해 엔티티가 실제 ..
2023.04.09 -
[JPA] 지연로딩과 성능 최적화 - 1
지연로딩과 성능 최적화 - 1 지연 로딩 때문에 발생하는 성능 이슈를 해결하기 위한 방법을 알아봅니다. 첫번째 강의는 지연 로딩과 엔티티로 데이터를 전달할 때 발생하는 오류에 대해 알아봤습니다. 지연 로딩 지연 로딩은 객체를 실제 사용하는 시점에 로딩하는 방식입니다. 지연 로딩을 사용하면 객체를 실제 사용하는 시점에 로딩하기 때문에 객체를 사용하지 않는 경우에는 로딩하지 않습니다. 지연 로딩은 처음 엔티티를 가져올 때 연관 객체까지 가져오지 않습니다. 이 때 Hibernate는 연관 객체를 상속한 프록시 객체를 생성해서 엔티티에 넣어둡니다.(보통 프록시를 초기화 한다고 얘기합니다.) 프록시 객체를 쓸 때 byteBuddy라는 라이브러리를 많이 쓰기 때문에 간혹 에러 로그에서 proxy, byteBuddy..
2023.04.08