본문 바로가기
반응형

분류 전체보기714

모든 것은 기본에서 시작한다(손웅정) 손흥민을 키운 손웅정의 철학은 무엇이었을까? 손흥민을 월드클래스로 키운 아버지의 철학이 너무나도 궁금했습니다. 손흥민은 18살에 함부르크 1군에서 데뷔골을 터트렸으며, 그 실력에는 항상 기본기를 연습하던 아버지의 훈련이 있었다고 합니다. 아버지가 어떤 철학으로 아들을 가르쳤는지 자세히 들을 수 있는 기회였습니다. 축구를 좋아하는 나로써, 또 기본기가 중요하다고 생각하는 나로써 흥미가 갔습니다. 먼저 손흥민 아버지는 엄청 부지런하고, 본인이 축구선수 시절 소위 정말 악으로 깡으로 부딪히고 도전하는 사람이었습니다. 또한 정직함에 올곧은 사람이었습니다. 체계적인 훈련과 시스템이 없다보니, 이른 선수 생활 마감에 엄청난 아쉬움을 가지셨습니다. 직접 선수로 생활하면서 느껴 온 아쉬움과 아들들의 축구에 대한 열정이.. 2022. 8. 22.
낙관적 잠금과 비관적 잠금으로 동시성 해결하기 개요 동시성 문제를 이전 시간에 정리했는데, 결국 동시성 문제를 어떻게 해결할 것인가가 다음 관심사입니다. 따라서, 이번 시간에는 동시성 문제를 해결하기 위한 데이터베이스의 잠금 모델 2가지 낙관적 잠금과 비관적 잠금을 알아보려고 합니다. 낙관적 잠금은 상황을 낙관적으로, 비관적 잠금은 비관적으로 본다고 접근하면 됩니다. 비관적 잠금(Pessimistic Lock) 비관적 잠금은 자원 경쟁을 비관적으로 보기 때문에, 다중 트랜잭션이 데이터를 동시에 수정할 것이라고 가정합니다. 따라서 하나의 트랜잭션이 데이터를 읽는 시점에서 락(Lock)을 걸고, 조회 또는 갱신 처리가 완료될 때까지 유지합니다. 조회 때 락 잠금을 획득하는 방법은 대표적으로 SELECT.. FOR UPDATE 입니다. SELECT...F.. 2022. 8. 19.
트랜잭션 격리 수준 개요 회사 게시판에서 db 트랜잭션 관련하여 재미있는 글을 봤습니다. 예약 시스템을 만드는데 select로 채번 순서를 가져오고 insert를 하다 보니 중복되는 예약번호가 나오는 문제가 있었고 어떻게 해결했는지를 적은 글이었습니다. 다중 쓰레드의 동시성으로 발생한 문제이며, select 시 동시성 문제를 해결해야 했습니다. 그러면서 트랜잭션 격리 레벨이 궁금해져서 찾아보게 되었습니다. 트랜잭션이란? 트랜잭션이란, 데이터베이스 작업의 논리적 단위입니다. 삽입, 수정, 삭제가 성공적으로 끝나 영구적으로 반영을 할 때 commit을 사용합니다. 삽입, 수정, 삭제의 변경 내용을 취소하고 복구해야 한다면 rollback을 사용합니다. DBMS는 잠금(Lock) 기능을 사용하며 다른 트랜잭션의 접근을 제어하여 .. 2022. 8. 12.
CORS란 무엇인가? 개요 웹 프로그래밍에서 프런트와 백엔드 작업을 하면, 한번씩 발생하는 문제가 CORS 문제입니다. 현재 하는 업무가 이런 경우는 없었지만, 개인 프로젝트 시 발생했던 문제를 기억하며 해당 문제가 왜 발생하고 어떻게 방지할 수 있는지 궁금증이 생겼습니다. 그래서 개념과 스프링에서 사용 방법을 정리해보려고 합니다. CORS란? CORS(Cross-Origin Resource Sharing)는 출처가 다른 자원들을 공유한다는 뜻으로, 한 출처에 있는 자원에서 다른 출처에 있는 자원에 접근하도록 하는 개념입니다. 직역하면, 교차되는 출처 자원들의 공유입니다. 다른 출처에 있는 자원을 요청한다고 하면, 이를 교차 출처 요청이라고 부릅니다. 교차 출처 리소스 공유(Cross-Origin Resource Sharin.. 2022. 8. 5.
운영체제 강의를 완강하며... *왜 운영체제 강의를 들었는가? 요즘 회사생활을 계속 하면서, 나는 어떤 사람인가, 어떤 것을 좋아하는가 생각과 고민을 많이하고 있습니다. 안전한 환경보다는 도전적인 환경을 좋아하며, 문제를 해결했을 때 엄청난 성취감을 느끼는 사람입니다. 또한 지적 배움에 갈망이 많다는 것을 더 깨달았습니다. 회사 업무에 익숙해진 시점에서, 새로운 컴퓨터 관련 학습에 목이 말랐습니다. 새로운 프레임워크를 공부할까, 이전 개념을 다시 복습할까 고민하던 중, 학부생 때 가장 좋아했던 운영체제 과목이 생각났습니다. 가장 좋아했지만 아이러니하게도 성적은 B+이었는데, 어중간하게 알던 개념을 확실하게 공부하고 싶었습니다. TMI를 하자면, 중학생 떄 약간 광적(?)으로 암기에 미쳤었습니다. 영어는 시험범위 지문을 눈감고 외울정도.. 2022. 8. 4.
생성자 vs setter vs field 의존성 주입 개요 DI를 하는 방법은 생성자 주입과 setter 주입이 있습니다. 2개를 코드로 비교하게 된 계기는, 스프링 공식문서에서 순화참조를 해결하기 위해서는 setter 주입을 사용하라고 했던 내용입니다. 생성자 주입이 훨씬 좋다고 평가되는데, 왜 setter 주입을 사용해서 해결하라고 했을까요? 실제 코드를 통해서 의존성 주입 방식에 따라 빈이 어떤순서로 생성되는지 비교해보겠습니다. 주입 방식에 따른 호출 순서 setter주입, 필드 주입, 생성자 주입에 따라서 매개변수가 있는 생성자, 매개변수가 없는 생성자, setter 함수 등이 어떤 순서로 실행된는지 알아보겠습니다. @Component로는 DogsDao, DogsService, DogsController 총 3개를 사용하겠습니다. setter 주입 .. 2022. 7. 15.
DI(Dependency Injection) 개요 IoC is also known as dependency injection (DI) 스프링 공식 문서에서는 IoC 개념과 DI개념의 설명이 일치하는 부분이 많습니다. 2개는 사실상 같은 원리로 작동하기 때문이며 다른 분들이 동의어로 사용하는 경우도 많습니다. 구체적으로 비교하면 차이가 있는데, 스프링 공식 문서를 중심으로 DI를 알아보려고 합니다. DI란? DI는 의존성 주입이라는 뜻으로, 개념적 정의 설명 이전에 먼저 코드로 "의존성이 있다"는 것이 어떤 의미인지 확인해보겠습니다. 사전을 찾아보니 다음과 같습니다. 영어사전을 보면, 불필요할 정도의 종속을 말하기도 합니다. 한국어를 보면, 다른 것에 의지하여 존재하는 것입니다. 즉, 혼자서는 독립적으로 존재하지 못하고 다른 요소에 도움을 받아야만 .. 2022. 7. 14.
DispatcherServlet & ContextLoaderListener * 개요 서블릿을 먼저 공부하고, 스프링 구조를 공부하면서, DispatcherServlet이 중요한 역할을 한다는 것을 알게되었습니다. 이 서블릿 덕분에 클라이언트의 요청을 스프링이 처리할 수 있으므로 그 동작과정과 작동원리가 궁금했습니다. 또한 이와 관련하여 WebApplicationContext와 ContetLoaderListener도 함께 공부했습니다. Web Application에는 1개의 ServletContext가 있습니다. 여기에는 여러 자원들의 공유자원들이 있습니다. WebApplicationContext는 ServletContext 안에 만들어 집니다. ContextLoadListener는 Root WebApplicationContext에 여러 자바 빈들을 적재합니다. 주로 Servic.. 2022. 7. 12.
Servlet * 개요 웹 자바 프로그래밍을 접하면, Servlet의 개념이 가장 기초가 됩니다. Servlet 자체가 웹 어플리케이션을 만들기 위해서 나온 기술이기 때문입니다. 하지만, 제대로 개념을 정리하거나 명쾌하게 답할 수가 없었습니다. 이 글을 통해서 개념을 정리해보겠습니다. * Servlet 소개 Servlet은 문맥에 따라서 여러 의미를 가집니다. - 웹 어플리케이션을 만들기 위해 Http 요청, 응답을 지원하는 기술입니다. - 동적 웹 페이지를 만들기 위해서 서버에 배포되는 컴포넌트입니다. - Web Application Context(WAS)(tomcat, jeus, weblogic)에서 기동되는 자바 클래스입니다. 참고로, WAS는 서블릿을 관리하기 위해 서블릿 컨테이너를 가지고 있습니다. - 각종 .. 2022. 7. 11.
반응형