전체 글

s7won의 개발일지
잡담

애매한 사람의 2년간의 개발자 취업 일대기

1. 개요 마지막으로 글을 쓴지 어느새 7개월이 지났네요. 블로그를 방치하려고 한건 아니었는데... 너무 바빴습니다.(핑계입니다)오늘 이렇게 새로운 글을 쓰는 이유는, 사실 취업을 했습니다.취업했으니까 취업후기나 써야지~ 이런건 아니고.. 본전공도 컴공이 아니었고, 졸업 후 2년간 취업준비를 하면서 내가 해온 일들을 지금 작성하지 않으면 스스로 까먹을 것 같기도 하고, 혹시 나의 이런 경험들이 누군가에게 도움이 될 수 있지 않을까 해서 글을 작성해보려고 해요. 이런 목적이다 보니 이번 글은 편하게, 또 두서없이 작성할 것 같습니다. 혹시 이 글을 읽으실분이 있을 진 모르겠지만, 매우 가독성이 좋지 않을 예정이니 미리 사과드립니다..> 저는 은행 디지털/IT부서에 취직하게 되었는데요, 사실 개발 공부를 시..

DB

파티셔닝(Partitioning) 샤딩(Sharding) 레플리케이션(Replication)

0. 시작 파티셔닝, 샤딩, 레플리케이션은 모두 대규모 데이터베이스 관리, 성능 최적화, 그리고 시스템의 안정성 및 가용성을 향상시키기 위한 전략이라고 할 수 있습니다. CS공부도 조금 해야하고, 마침 새로 시작하는 프로젝트를 MSA로 진행할 것 같아서, 한번 이 개념들에 대해서 알아볼게요 1. 파티셔닝(Partitioning) 파티셔닝이란 기본적으로 Database Table을 더 작은 Table로 나누는 것을 의미합니다. 파티셔닝은 크게 두 가지 종류로 나눌 수 있습니다. Vertical Partitioning Column을 기준으로 table을 나누는 방식입니다. Horizontal Partitioning Row를 기준으로 table을 나누는 방식입니다. 먼저, Vertical Partitionin..

운영체제

스핀락(Spinlock) 뮤텍스(Mutex) 세마포어(Semaphore)

0. 기본 개념 경쟁 조건 (Race Condition) 여러 프로세스/스레드가 동시에 같은 데이터를 조작할 때 타이밍이나 접근 순서에 따라 결과가 달라질 수 있는 상황 동기화(Synchronization) 여러 프로세스/스레드를 동시에 실행해도 공유 데이터의 일관성을 유지하는 것 임계 영역(Critical Section) 공유 데이터의 일관성을 보장하기 위해 하나의 프로세스/스레드만 진입해서 실행 가능한 영역 상호 배제(Mutual Exclusion) 위의 임계 영역에서 설명한, 하나의 프로세스/스레드만 진입해서 실행한다는 것 또는 동시 프로그래밍에서 공유 불가능한 자원의 동시 사용을 피하기 위해 사용되는 알고리즘 그렇다면, 어떻게 이 상호 배제를 달성할 수 있을까요? 락(Lock)을 사용해서 이를 달..

운영체제

컨텍스트 스위칭(Context Switching)

1. 컨텍스트 스위칭(Context Switching) 컨텍스트 스위칭의 정의 지난 글에서 프로세스와 스레드를 얘기하면서 컨텍스트 스위칭(문맥 교환)에 대해서 짧게 얘기했었는데요, 오늘은 이 컨텍스트 스위칭에 대해서 자세히 알아보려 합니다. 컨텍스트 스위칭이란, 'CPU/코어에서 실행 중이던 프로세스/스레드가 다른 프로세스/스레드로 교체되는 것'입니다.그렇다면, 여기서 말하는 컨텍스트란 무엇일까요? 컨텍스트란 프로세스/스레드의 상태를 의미합니다. 또 이 상태라는 것은 CPU, 메모리에서의 상태를 의미합니다. 컨텍스트 스위칭이 필요한 이유 그렇다면 컨텍스트 스위칭이 왜 필요할까요? 여러 이유들이 있지만, 대표적으로 여러 프로세스와 스레드들을 동시에 실행시키기 위해(그렇게 보이기 위해) 여러 프로세스와 스레..

운영체제

프로세스, 스레드, 멀티태스킹, 멀티프로세싱....??

0. 개요 안녕하세요. 오늘은 여러 프로그래밍이 동시에 실행될 수 있는 원리에 대해서 알아보고자 합니다. 즉, 프로세스, 스레드, 멀티태스킹, 멀티스레딩, 멀티프로세싱, 멀티프로그래밍...이라는 헷갈리는 것들에 대해서 알아볼게요. 1. 사전 지식 프로그램(Program) : 컴퓨터가 실행할 수 있는 명령어들의 집합 프로세스(Process) : 컴퓨터에서 실행 중인 프로그램. 각각의 프로세스는 독립된 메모리 공간을 할당 받음. 명령어들과 데이터를 가짐 CPU(central processing unit) : 명령어를 실행하는 연산 장치 메인 메모리(Main memory) : 프로세스가 CPU에서 실행되기 위해 대기하는 곳 IO(input / output) : 파일을 읽고 쓰거나 네트워크의 어딘가와 데이터를 ..

DB

트랜잭션(Transaction)

1. 트랜잭션의 예시 본격적으로 트랜잭션에 대해 알아보기 전에, 흔한 예시를 통해 이해를 쉽게 하고자 합니다. 우선, A가 B에게 100만 원을 송금하는 과정에 대해서 생각해 보겠습니다.A->B로 100만 원을 전송했다는 이야기는, 결국 A는 -1000000원, B는 +1000000원이 되었다는 이야기죠?이를 SQL로 작성해 보면 아래와 같이 작성할 수 있겠네요. UPDATE account SET balance = balance - 1000000 WHERE id = 'A'; UPDATE account SET balance = balance + 1000000 WHERE id = 'B'; 여기서 중요한 것은 '송금'이라는 작업이 성공하려면, 이 두 쿼리가 '모두' 실행이 되어야 합니다. 만약, 1번째 줄의 ..

SPRING

[SPRING + REDIS] 유저 정보 캐싱으로 성능 개선해보기

0. 개요 안녕하세요. 지난 글에서 발생했던 문제에 대해서 얘기해보려고 합니다. 저번 글에 마지막 글에 보여드렸던 사진입니다. Spring Security를 적용해 본 분이라면 정말 익숙한 메소드죠? 메소드 명 그대로, 유저 정보를 로드하는 메소드입니다. 문제는 뒤에 있는 '병원'이 어떠한 요청을 할 때마다 2번의 조회쿼리가 발생한다는 거에요. 사실 2번의 단순한 조회쿼리가 성능에 큰 영향을 미칠까? 라고 한다면 크리티컬 한 부분은 아니라고 대답하겠지만, 사용자가 많은 서비스라면 이러한 부분에서도 성능 개선이 가능하다고 생각했습니다. 그럼, 실제로 모든 요청에 2번 조회쿼리가 나가는지 확인해볼까요? 병원으로 아무 요청이나 보내보겠습니다. 제가 위에서 구현한 코드 그대로 회원을 먼저 조회하고, 병원을 조회..

SPRING

[SPRING + JPA + SECURITY] 너무 다른 2종류의 회원을 어떻게 설계할까?

0. 개요 안녕하세요! 오늘은 SpringSecurity, JPA 환경에서 서로 다른 2종류의 회원을 설계하면서 느꼈던 고민들에 대해서 작성해보려고 합니다. 이 글을 작성하는 이유는 '내가 이렇게 구현했으니 참고하세요!' 보다는 '다른 사람들은 이런 상황에서 어떻게 구현할까?' 가 궁금해서에요. 제가 어떠한 이유로 이렇게 구현했는지 설명해 드리고, 여러분이라면 어떤 식으로 구현할지 의견을 들어보고 싶습니다. 제가 의도한 대로 구현하긴 했지만, 이게 최선이라는 확신도 들지 않고 다른 사람이라면 어떻게 이 문제를 풀었을까? 라는 궁금증이 풀리질 않아서 이 글을 쓰게 되었네요. 시작하기에 앞서, 2가지의 양해드리는 부분이 있습니다. 첫 번째로는 글을 작성하기에 제 프로젝트의 코드들은 이미 구현이 끝난 코드들이..

JAVA

자바의 Record로 DTO를 만들어보자 - 2

1. 다시 글을 쓴 이유 안녕하세요. 오늘은 Record에 대해서 다시 한번 작성해보려고 합니다. 생각보다 Record를 보려고 찾아주시는 분들이 많더라구요. 그래서 제가 직접 프로젝트에 도입해서 적극적으로 사용하면서 느낀 편리한 점들과 처음 사용하는 분들이 자주 하는 실수, 또 더불어서 동료들이 Record를 사용하면서 느꼈던 것 들에 대해서 공유해볼까 합니다. 아래의 작성할 코드에 대해서는, 코드 스니펫 가독성이 별로 안좋은 것 같아서 코드들은 사진으로 첨부하겠습니다. 바로 시작해 보겠습니다! 2. 개인적인 소감 새로운 프로젝트를 진행하면서, 제가 적극적으로 영업해서 모든 dto를 record로 구성해 보았습니다. 아직 진행중인 프로젝트인데도, 벌써 46개의 record가 만들어졌네요. 이전 글에서도..

JAVA

Stream API의 map에 대해서 코드로 이해해보자

안녕하세요. 오늘은 Java의 Stream API 메소드 중에서, map에 대해서 알아보겠습니다. 0. 추천 독자 이 글은 특히 Stream API에 대해서 어느정도는 알고 있지만, 활용이 쉽지 않으신 분 혹은 Stream에 대해서 사용하면서 익히고 싶은 분이 읽으시면 특히 좋을 것 같습니다. 1. 학습목표 당연하게도 Stream API의 map에 대해서 공부하는게 목적입니다. 그런데 왜 하필 map이냐고요? 왜냐하면, 사실 제가 Stream 사용에 있어서 가장 이해가 안 되고 어려웠던 부분이 map이었습니다. map을 잘못 이해하고 사용하려다 보니 저의 Stream을 활용한 코드는 빨간 줄이 항상 가득했었어요. 그래서 많이 쓰는 Stream 코드를 아예 외워서 사용했었습니다. 이대로는 안 되겠다 싶어서..

s7won
낙서장