개발공부(173)
-
[프로그래머스 스쿨] 알고리즘 - 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 -
Transaction
Transaction 트랜잭션이란 무엇일까요? DB에 조회든 생성/수정이든 요청을 보내는 한번의 통신을 트랜잭션이라고 생각했습니다. 조금 더 자세한 정의를 찾아보고자 글로 정리해보았습니다. techopedia에는 이렇게 정의해두었습니다. 트랜잭션은, 데이터베이스란 문맥 상에선 독립적으로 데이터를 조회하고 업데이트 하기 위해 실행되는 논리 단위라고 합니다. 그리고 전문가들은 데이터베이스 트랜잭션을 데이터베이스 디자인 환경 내에서 얻을 수 있는 "작업 단위"라고 얘기합니다. 그리고 트랜잭션은 COMMIT으로 시작돼 ROLLBACK SQL로 끝이나며 완성됩니다. ACID는 트랜잭의 특징들을 정의합니다. Atomicity(원자성) : 트랜잭션은 완결성을 충족시켜야 합니다. 커밋이 완료돼 DB에 저장이 되든, 롤..
2022.06.04 -
Blocking and Non-blocking I/O
Blocking and Non-blocking I/O NIO는 데이터들을 보관할 클래스들을 정의하고, 데이터를 블록들 내에서 처리하는 방식으로써 low-level 최적화의 이점을 가집니다. I/O란 컴퓨터와 세상을, 하나의 프로그램과 컴퓨터를 연결해주는 인터페이스 입니다. 대부분의 I/O가 실제로 운영체제에 내장되어 있는 것은 컴퓨터 시스템에 매우 중요한 요소입니다. 모든 I/O는 1 byte들을 하나씩 Stream으로 읽어야했습니다. 이는 객체를 byte로 변환하거나, 반대로 byte를 객체로 변환해주는 기능을 했습니다. NIO는 I/O와 동일한 역할과 목적을 가지지만, Stream과 달리 block I/O라는 메타포를 사용합니다. 나중에도 나오겠지만, block I/O는 stream I/O보다 효율적..
2022.06.04