전체 글

·Spring
Servlet자바를 사용하여 웹페이지를 동적으로 생성하는 서버측 프로그램자바로 구현된 CGI(Common Gateway Interface, 서버와 애플리케이션 간에 데이터를 주고받는 방식) 사진 출처 -  https://electricalfundablog.com/common-gateway-interface-cgi/    서블릿의 동작(0. 로딩시점 혹은 최초 요청 시점에 Servlet 이 생성) -> 서버 설정에 따라 다름1. Client 가 Http 요청2. HTTP 요청을 통해 매핑된 URL 이 호출3. ServletContainer 가 HttpServletRequest, HttpServletResponse 객체 생성 (Http 요청 메시지 기반으로 생성)4. ServletContainer 가 Ser..
·CS/DB
보통 인덱스에 대해 설명할 때 책에 있는 찾아보기로 비유를 많이 한다 찾아보기를 사용해서 해당 키워드가 책의 어느 부분에 있는지 빠르게 찾아낼 수 있으나 찾아보기가 책의 내용에 비해 너무 많다면, 해당 키워드가 너무나도 많이 분포되어 있다면 매우 비효율적이게 된다 인덱스도 마찬가지이다인덱스를 사용해서 얻을 수 있는 장점은1. 검색 속도가 빨라질 수 있다2. 해당 쿼리의 부하가 줄어들어 시스템 전체의 성능이 향상될 수 있다 물론 단점도 있다1. 인덱스는 데이터베이스 크기의 10% 정도의 추가공간을 필요로 한다2. 처음 인덱스를 생성하는데 시간이 많이 소요될 수 있다3. 데이터의 변경 작업(Insert, Update, Delete) 이 자주 일어나는 경우 성능이 나빠질 수 있다 MySQL 은 인덱스를 사용하..
·Spring
관점 지향 프로그래밍 AOP (Aspect Oriented Programming)-> 애플리케이션을 바라보는 관점을 횡단 관심사 관점으로 보는 것-> OOP 대체 X-> 횡단 관심사를 깔끔하게 처리하기 어려운 OOP 를 보조하는 목적 OOP 가 가진 부가 기능 적용 문제-> 수많은 중복, 그로 인한 수많은 수정 AspectJ : AOP 의 대표적인 구현-> 자바 프로그래밍 언어에 대한 완벽한 관점 지향 확장-> 횡단 관심사의 깔끔한 모듈화 (캐싱, 로깅, 오류 검사 등) 스프링이 사용하는 AOP 적용 : 런타임 시점에 프록시를 이용하여 적용  AOP 용어Join pointAdvice 가 적용될 수 있는 위치, AOP 를 적용할 수 있는 모든 지점, 스프링의 경우 메소드 실행 지점  Advice 행하고싶은..
·CS/DB
다들 N:M 관계를 1:N 과 M:1 로 풀어주어야 한다는 얘기를 많이 들어보았을 것이다 '영화' 테이블과 '배우' 테이블이 있다고 가정해보자 Movie 도 여러 Actor 를 가질 수 있고 Actor 도여러 Movie 를 가질 수 있다우리는 이러한 관계를 N:M 관계, 다대다 관계라고 표현한다 하나씩 풀어가보자     Movie 테이블이 가진 컬럼들movie_id(PK), title, director    ----->   어떤 배우들이 출연했는지에 대한 정보를 엮어주고 싶다 Actor 테이블이 가진 컬럼들actor_id(PK), name, age    --------> 배우가 어떤 영화들에 출연했는지에 대한 정보를 엮어주고 싶다 우린 이러한 상황에 어떻게 해야할까?     Movie 테이블에 Actor..
https://khan-0103.tistory.com/24 Reflection 으로 JDBC Template 구현해보기 (행복 ver)데브코스 백엔드 1기 첫번째 팀 프로젝트(토이 프로젝트지만..)를 진행하게 되었다 대충 주제는 'JDBC 를 이용해서 간단한 프로젝트 만들기!' 였다 결국엔 JDBC우리가 ORM 기술을 사용하든 SQL Mapperkhan-0103.tistory.com  여기서 만든 JDBC Template 조무사를 팀 토이 프로젝트에 적용해보았다 처음엔 설렘 반, 두려움 반이었으나 30분정도가 지나고 난 후 절망 99% 로 바뀌게 되었다 내가 만든 Utility 클래스(쿼리를 객체로 맵핑, 삽입) 에는 여러가지 문제점이 있었다 내가 느끼기에 치명적이었던 문제 순서대로 설명하겠다  1. E..
데브코스 백엔드 1기 첫번째 팀 프로젝트(토이 프로젝트지만..)를 진행하게 되었다 대충 주제는 'JDBC 를 이용해서 간단한 프로젝트 만들기!' 였다 결국엔 JDBC우리가 ORM 기술을 사용하든 SQL Mapper 기술을 사용하든 결과적으로 JDBC 에 쿼리를 보내주는 것은 동일하다. 우리가 직접 보내느냐 저런 기술들을 거쳐서 보내느냐 정도의 차이이다. 따라서 JDBC 에 대해서 알고가는 것이 백엔드 개발자로서의 사명감이라고 생각을 한다. (물론 지금 우리가 직접 JDBC 만 이용해서 코딩하진 않지만) SQL Mapper 와 ORM 기술이 탄생한 이유이번 데브코스 첫 토이 프로젝트는 개발자들의 역사를 직접 체험해보는 시간이라 정말 감명깊었으나 JDBC 를 한번도 사용한 적이 없기에 이러한 코딩은 엄청난 ..
·Java/클린코드
Primitive Obsession-> 원시타입 강박코드가 Primitive Type(원시 타입)에 너무 많이 의존할 때를 말한다도메인의 객체를 나타내기 위해 primitive type 을 사용하는 것을 피해야 한다 원시타입 강박을 해결하는 방법들과 그로인해 얻게 되는 이점은 무엇이 있는지 알아보자  원시값 포장코드를 먼저 보고 이해해보자 원시값 포장 적용 전public class Student { private String name; private int score; public Student(String name, int score) { if (score 100) { // name 에도 조건을 걸어버리는 경우 더욱 복잡해진다 throw new Il..
·Java/병렬성
사실 원래 주제는 CompletableFuture 였는데 Future 의 get( ) 과 CompletableFuture 의 get( ) 을 각각 돌려보면서 정말 신기한 점을 발견해서 주제를 바꾸게 되었다. 간단히 요약하면 Future.get( ) 과 Completable.get( ) 은 완전히 다르다!!! 일단 차근차근 비동기가 무엇인지부터 시작하자 비동기 처리멀티 스레드 상황에서 스레드들은 각자의 코드를 각자의 페이스대로 수행한다. 특정 시점에서 어떤 스레드가 먼저 실행되는지는 알 수 없으며 공유자원에 대한 문제가 생길 수 있다. 공유자원에 대한 안전성을 제공하기 위해 임계영역에 대한 처리를 하다보면 비효율적인 처리가 생길 수 있다. 예를 들어, 임계 영역에 오랜 시간이 걸리는 작업이 있고, 다른 스..