본문 바로가기

Programming

(138)
객체지향의 사실과 오해 (The Essence of Object-Orientation) - 책정리 객체지향의 사실과 오해 (The Essence of Object-Orientation) 역할, 책임, 협력 관점에서 본 객체지향 Roles, Responsibilities, and Collaborations 1. 협력하는 객체들의 공동체 역할, 책임, 협력 역할은 기대되는 책임이 있고, 각 역할들이 협력해서 원하는 것들을 해낸다. 동일한 역할 중복 가능 역할은 대체 가능함 책임을 수행하는 방법은 선택 가능 (동일 요청에 다른 방식 응답 - 다형성) 하나가 여러 역할 수행 가능 객체의 덕목 2가지: 협력적, 자율적 협력은 메시지를 통해 이루어진다. 요청을 표현하는 메시지와, 요청을 처리하는 구체적 방법인 메서드를 분리하는 것은 자율성을 높이는데에 도움이 되고, 캡슐화(encapsulation)와 관련이 깊..
소프트웨어 장인 (프로페셔널리즘, 실용주의, 자부심) 책 정리 소프트웨어 장인 (The Software Craftsman) - 산드로 만쿠소 지음 1. 21세기의 소프트웨어 개발 예전의 개발 문화 새로운 문화 (최근) 소프트웨어 장인정신이 필요해졌다. 2. 애자일 (Agile, 민첩) 나오게 된 배경은 이전 시대의 워터폴 방식의 부족함에서 출발 분류 절차적 관점: 올바른 목표를 향해 가는지 확인 기술적인 관점: 목표한 것을 올바르게 실행하고 있는지 확인 애자일 메니페스토(menifesto, 선언문) 원칙들 실제 애자일을 실행할 때 기업들은 오해를 한다. 절차적인 것을 중시하고 기술적인 것은 무시한다. 소웨 개발자들의 기술은 완벽하고 절차만 고치면 된다는 식의 사고방식은 안된다. 기업 차원에서 소웨 장인정신이 필요하다 3. 소프트웨어 장인정신 정의: 소프트웨어 개발의..
[Database] Optimistic lock(낙관적 잠금), Pessimistic lock(비관적 잠금) 에 관하여.. Optimistic lock(낙관적 잠금), Pessimistic lock(비관적 잠금) 에 관하여.. 우선 데이터베이스의 격리수준(Isolation level) 에 대하여 알아야 한다. 트랜잭션 격리수준에 관하여(MySQL).. https://itdar.tistory.com/389 목차 각각 어느 상황에서 사용하는 것이 좋을지? Lock 을 하는 이유는? Optimistic lock (낙관적 잠금) 이란? Pessimistic lock (비관적 잠금) 이란? 각각 어느 상황에서 사용하는 것이 좋을지? Optimistic lock (낙관적 잠금) 동시 레코드 업데이트가 드물거나, lock 오버헤드가 높은 것으로 예상될 때 사용한다. 데이터베이스에 연결을 유지하고 있을 필요가 없는 대용량 시스템, 3계층 ..
[Database] 트랜잭션 격리수준에 관하여.. (데이터베이스 Transaction isolation level) [MySQL] 데이터베이스 트랜잭션의 격리수준에 관하여.. (Database transaction isolation level) 목차 트랜잭션 격리수준 이란 무엇인가? 격리수준에 따라 발생할 수 있는 문제점들은? 격리수준의 종류는? 격리수준에 따른 문제 발생 표 트랜잭션 격리수준 이란 무엇인가? (Transaction isolation level) 각 트랜잭션 사이의 격리된 정도 같은 데이터에 여러 트랜잭션이 겹쳤을 경우, 어떤 상태로 읽을지를 결정한다. 비지니스 모델에 따라서, 어떤 결과가 나오는지에 맞춰서 격리수준을 결정한다. 격리수준에 따라 발생할 수 있는 문제점들은? (부정합 문제 Problems) Dirty read A 트랙잭션이 데이터를 핸들링하고 있는데, B 트랜잭션에서 해당 데이터를 읽을 ..
[네트워크] 세션과 토큰에 관하여.. (feat. 쿠키) / Session, Token, Cookie, Network 네트워크의 토큰과 세션에 관하여.. 면접에서 나온 질문인데, 분명 기술 질문 관련해서 정리하면서 몇번 읽었던 내용이었지만, 실제로 접하며 느낀 적이 없어서 그런가 깔끔하게 대답을 못해서 다시 정리한다. 세션과 토큰이 나온 배경 HTTP 의 stateless 특성 때문에, 로그인 등의 상태를 유지해야 하는 경우를 보완하기 위해 나옴. 세션이란? 통신을 하기 위해서 서로 연결된 순간부터 통신을 마칠 때 까지의 기간 즉, HTTP 세션이란 클라이언트가 웹서버에 연결된 순간부터 통신 종료 까지의 기간 쿠키를 기반으로 동작한다. (여기서 쿠키는, 세션에 앞서 stateless 문제를 해결하기 위해 나왔다) 보안 문제 등으로 세션 아이디만 쿠키에 넣어 왔다갔다 할 수 있도록 세션을 만들었다. 쿠키만 있을 때에는 쿠..
Deadlock 데드락에 관하여.. 멀티쓰레드 사용 시, 멀티쓰레드 사용 시, 데드락에 관하여.. 데드락의 발생 조건 데드락을 해결을 위한 방법들 데드락의 발생 조건 아래 4가지 조건을 동시에 충족하면 데드락이 발생한다. 1. Mutual Exclusion(상호배제, mutex - 자원에 대한 동시접근 불가) 한번에 여러 프로세스(혹은 쓰레드)가 한 자원에 접근하지 못하도록 막음 (만약 동시에 자원 접근이 가능하다면 애초에 다른 프로세스가 다 쓰길 기다릴 필요가 없다) 2. Hold and Wait(점유대기) 자원을 가지고 있는 상태에서 다른 프로세스가 쓰는 다른 자원을 기다리는 상태 3. No Preemption(선점불가) 다른 프로세스가 이미 점유한 자원을 강제로 뺏어오지 못함 우선권이 우선한다는 뜻의 "선점" 4. Circular Wait(환형대기, 순환..
Java 의 final keyword 에 관하여.. 자바의 final 키워드에 관하여.. 인터뷰에서 버벅대서 정리한다. 자바에서 final 키워드를 사용할 수 있는 곳에는, class, method, variable 에 사용할 수 있다. 사용하는 이유는? Immutable (불변) -> 따라서 쓰기가 불가하다. (read-only) 1. 클래스를 상속받을 수 없도록 만든다. 2. 메서드를 override 가 불가하도록 만든다. 3. 변수를 read-only 상수로 만든다. 가독성을 해치지 않는 범위에서 써야한다고 하는데, 개인적으로는 불변해야 하는 엔티티를 정확히 지정해주고 명시해준다는 점에서 가독성이 더 좋아지는 경우가 있다고 본다. 그리고.. 상속해서 공통으로 사용하는 변수의 경우 등, 변하지 않아야 하는 내용에 붙여서 버그를 방지할 수 있다. 요새는..
Spring framework, @Transactional(readOnly=true), 스프링 프레임워크 읽기 전용 트랜잭션을 하는 이유는? 읽기 전용 트랜잭션에 관하여 스프링 프레임워크에서 제공하는 트랜잭션을 읽기 전용 모드로 설정 할 수 있다. @Transactional(readOnly = true) 위 어노테이션을 사용하면 강제로 플러시 호출을 하지 않는 한 플러시가 일어나지 않는다. 그 말은, Persist context 에 올라가 있는 내용을 동기화 시켜주지 않는다는 이야기 그래서 트랜잭션을 커밋하더라도 영속성 컨텍스트가 플러시 되지 않는다. 그래서 엔티티 등록, 수정, 삭제 가 동작하지 않는다. (읽기만 가능하다) 또한 변경 감지를 위한 스냅샷 비교 등 무거운 로직들을 수행하지 않으므로 성능이 향상된다. 2021.07.20 - [Programming] - Spring MVC 프레임워크 구조 Framework 구성요소 Spring M..