전체 글

항상 최적의 코드를 고민합니다
# JPA 연관관계의 필요성 RDB와 Java사이에는 패러다임의 차이가 존재합니다. 관계의 표현 - 객체는 상속, 구성, 집합 / RDB는 일대일, 일대다, 다대다 데이터의 표현 - 객체는 상태와 행동을 가짐 / RDB는 ROW와 COLUMN으로 구성 데이터의 지속성 - 객체는 메모리에 일시적으로 존재 / RDB는 디스크에 저장하고 검색 이러한 차이점 때문에 DB를 설계하고 Java에서 DB 데이터들을 객체로서 효율적으로 관리하기가 쉽지 않습니다. 이에 대한 해결책으로 JPA(ORM)가 개발되었고 이는 객체와 테이블 간의 매핑을 훨씬 쉽게 해줍니다. 그렇다면 JPA를 활용해서 어떻게 연관관계를 매핑하는지 알아보도록 하겠습니다. # JPA 연관관계 0. 배경 지식 DB는 FK 하나로 양쪽 테이블 JOIN이..
요즘 배포까지 진행하는 거의 모든 웹 서버들은 Docker를 사용합니다. 하지만 우리는 과연 Docker의 필요성을 잘 알고 있는 상태에서 이 기능을 채택했을까요? 그저 좋다고 알려져 있어서, 남들이 다 써서 쓰는건 아닐까요? 저의 경우, 되돌아 생각해보니 도커를 써본적은 있지만 꼭 써야했나? 라는 질문에 제대로 대답할 수 없었고 그저 VM을 새로 파기 싫어서 써왔던것 같네요. 이번 포스트에서는 컴퓨터에서 프로세스와 Docker, VM과의 관계, Docker와 VM의 차이와 장단점, 이것을 알아보면서 떠올랐던 저만의 궁금증들에 대해 알아보겠습니다. (궁금증은 조금 뜬금없어서 읽으시면서 논점이 흐려질수 있습니다. 1. 프로세스 1.1 프로세스란 컴퓨터에는 "프로그램"이라는 것이 존재합니다. 예시로 word..
· Algorithm
# 최대 부분 배열 합이란? 개념은 아주 간단합니다. 주어진 수 배열에서 연속된 부분 배열 중 합이 최대인 부분 배열을 찾는 알고리즘입니다. 이 문제는 완전 탐색, 부분합 수열, 분할 정복, DP 를 활용하여 풀 수 있지만 각각 시간 복잡도가 O(2^n), O(n^2), O(nlogn), O(n) 로 다르기 때문에 가장 효율적인 DP로 푸는것이 가장 바람직합니다. # 예제 코드 def getSum(arr): dp = sequence[0]# 현재까지의 최대합 cur = 0# 실시간 최대합 for x in arr: cur = max(x, cur + x)# 특정 구간까지의 합 + 현재 값 vs 현재 값 dp = max(dp, cur)# cur이 현재까지 최대합보다 크다면 갱신 return dp # 알고리즘의 ..
API를 설계한다고 하면 대부분 RESTful API를 떠올리게 됩니다. 간결하고 직관적인 설계 때문에 굉장히 많이 사용되고 있는 API 방식입니다. 하지만 우리는 그저 "다른 사람들이 다 하니까" RESTful API 방식을 채택하고 있지는 않은지 생각해 볼 필요가 있다고 생각합니다. 따라서 이 포스트에서는 RESTful API가 무엇이며, 왜 널리 대중적으로 사용되고 있는지 알아보고 다음 포스트에서는 다른 방식은 어떤 것들이 있는지 살펴보고, 무지성으로 RESTful API를 사용하는것이 아닌 어떤 서비스에 어떤 방식이 적절할지 고민해보도록 하겠습니다. REST API, RESTful API를 보통 혼용해서 사용하며 두가지 모두 REST 원칙을 준수하는 API로 의미는 같습니다. REST API를 알..
· Back-end
DDD에 대한것들을 공부하다가 관리, 운영, 배포에 관한 글을 읽고 배운것이 많아 글로 남기게 되었습니다. 기술에 대한 자세한 내용은 없고 철학이나 각각의 역할에 대해서만 서술하겠습니다. # 시대 변화 시대는 하루가 빠르게 변화하고 있습니다. 특히 이공계쪽은 미래가 상상이 가지 않을정도 입니다. 결국 사용자에게 '서비스'를 제공하는 개발자라는 사람들은 알 수 없는 미래에 빠르게 대응해야 하는 상황입니다. '성능(속도)'과 '확장성'이 굉장히 중요해졌습니다. 서비스라는 것도 결국 돈에 의해 만들어지고 운영되는 것이기 때문에 2가지 특성을 가지고 가면서 비용을 최소화하려고 노력하였습니다. # 어떻게 변하고 있는가 1. 대규모 silo 조직 -> 다기능 소규모 squad 조직 2. 서버 단위가 작아지고 있습니..
# DB를 잘 설계해야하는 이유 어플리케이션을 하나 만들기 위해서는 굉장히 많은 양의 데이터를 처리해야 합니다. 우리는 보통 이 문제를 DBMS를 사용하여 무수한 데이터를 저장하고 원할때마다 알맞게 꺼내씁니다. 하지만 실생활에도 그렇듯이 어떤 방식으로 정리하고 관리하느냐에 따라 사용할때의 속도(성능)이 달라집니다. 여러 데이터베이스 종류가 있지만 그 중에 RDB를 사용할때 조금 더 효율적인 DB를 설계할 수 있는 방법에 대해 알아보겠습니다. 효율적인 DB의 가장 궁극적인 형태는 '시간'과 '돈'을 최대한 아낄 수 있는 형태입니다. 서비스도 결국 '비용'으로 운영되고 관리되기 때문입니다. 예외적으로 다른 선택지를 택해야 할때도 있지만 비로소 이렇게 해야 나중에 발생할 '비용'도 최대한 줄일 수 있습니다. ..
· Network
# 네트워크 Net + Work의 합성어로서 '컴퓨터들이 통신 기술을 이용하여 그물망처럼 연결된 통신 이용 형태'이다. 쉽게 말해, 정보공유를 목적으로 컴퓨터와 컴퓨터가 연결되어 형성된 망을 의미한다. # 중요 용어 ip 주소 : 통신을 위해 인터넷 프로토콜을 사용하는 네트워크에 연결된 모든 디바이스에 할당된 고유 번호. 노드 : 데이터를 송신, 수신, 작성, 저장할 수 있는 네트워크 내의 연결 지점. ex) 컴퓨터, 프린터, 모뎀, 브릿지 및 스위치 라우터 : 네트워크 간에 데이터 패킷에 포함된 정보를 전송하는 물리적 또는 가상 디바이스. 패킷교환기 라우팅 : 라우터가 패킷을 네트워크에서 목적지까지 보내는 최적의 경로를 선택하는 과정 스위치 : 다른 디바이스를 연결하고 노드 간 통신을 관리하여 데이터 ..
# 등장배경 서드파티 어플리케이션이 사용자 대신 페북에 영향을 주거나 정보를 가져오려고 한다고 가정해 봅시다. 가장 기본적인 방법은 서드파티가 id, pw를 사용자로부터 입력 받아서 서드파티가 다른 서비스에 대신 로그인해서 접근하는 방식입니다. 하지만 이 방법에 치명적인 단점이 있는데 페북 id, pw를 서드파티가 관리할만큼 믿을만 한가에 대한 의문입니다. 즉, 서드파티의 보안수준이 페북의 보안수준이 되어버리는 문제가 발생합니다. 이를 해결하기 위해 서비스별로 여러가지 auth방식이 나왔는데 이를 OAuth로 통일시키기로했습니다. # OAuth란 다양한 플랫폼의 특정한 사용자 데이터에 접근하기 위해 제3자 클라이언트(우리의 서비스)가 사용자의 접근 권한을 위임(Delegated Authorization)..
whitem4rk
high-end back-end