전체 글 142

[Spring] 스프링 성능 최적화에 대한 고찰

어느날 문득 무작정 스프링을 쓰는 것보단, 왜 쓰는지에 대해 생각을 해보면서 코딩을 하면 좋을 것 같다는 생각이 들었다. 난 실무를 경험한 적이 없으므로, 실무를 하며 "아 이렇게 해야겠구나"라는 체감을 한 적이 없다. 그래서 어쩔 수 없이 아쉽지만 이론상으로라도 접해야겠다. (그냥 아무 생각 없이 하는 것보단 나을 것 같음) 제일 먼저 찾아본 자료는 [REST API를 개발할 때, 성능 최적화를 하는 방법들]에 대해서다. 제일 중요한 건 엔티티를 웹에 노출해서는 안 된다고 한다. 그럼 어떻게 해야 할까? → 간단하다. 별도의 DTO를 만들어, 거기서 조회한 엔티티를 넣어서 반환해주면 된다. 문제점 JPA로 애플리케이션을 개발할 때 발생하는 다양한 성능 문제와 해결 방안을 알아보자. N + 1 문제 JP..

Spring/그 외 2023.01.24

[자료구조] 해시(Hash)

해시 테이블 (Hash Table) 데이터를 효율적으로 관리하기 위해, 임의의 길이 데이터를 고정된 길이의 데이터로 매핑하는 것. 해시 함수를 구현하여 데이터 값을 해시 값으로 매핑한다. 해시 테이블의 특징 해시 테이블이란, (key, value)의 형태로 데이터를 저장하는 자료구조이다. 빠른 데이터 검색이 필요할 때 유용하다. 해시 함수에 key를 적용해 고유한 index를 생성하여, 그 index에 저장된 값을 꺼내오는 구조이다. 해시 충돌이 일어나지 않는 경우, 해시 테이블의 시간 복잡도는 O(1) Hash map, map, dictionary, 연관배열 등의 이름으로 알려져 있다. 해시 함수 key를 해시로 바꿔는 역할을 한다. 다양한 길이를 가지고 있는 key를, 일정한 길이의 hash로 바꾸어..

CS/자료구조 2023.01.24

[자료구조] 트리(Tree)와 힙(Heap)

비선형 자료 구조란? 일렬로 나열하지 않고 자료 순서나 관계가 복잡한 구조를 말한다. 일반적으로 트리나 그래프를 말한다. 트리(Tree) 트리는 계층적 관계(Hierarchical Relationship)을 표현하는 자료구조이다. Node(노드)와 Edge(간선)로 이루어진 자료구조이다. 용어 - 노드 (Node) : 트리를 구성하고 있는 각각의 요소를 의미한다. - 간선 (edge) : 노드와 노드를 연결하는 선 - 루트 노드 (Root Node) : A 트리 구조에서 최상위에 있는 노드를 의미한다. - 단말 노트 (leaf node) : F, G, H, I, J 차수가 0인 노드, 즉 자식 노드가 없는 노드. - 형제 노드 (sibling node) : H와 I는 형제 노드이다. 같은 부모 노드의 자..

CS/자료구조 2023.01.24

[Spring] 왜 스프링을 쓰는가? (특징 & 계층 구조)

Spring을 왜 쓰는가에 대한 고찰... (개발자들의 생산성을 높이기 위해 굉장히 최적화하였다.) Spring Framework Java 기반의 플랫폼 개발을 위한 오픈소스 애플리케이션 프레임워크 중 하나. ※ 프레임워크 : 개발할 때 설계 기본이 되는 뼈대나 구조, 환경 (애플리케이션 흐름의 주도권을 가지고 있음) 재사용성, 확장성 부분에서 객체 지향 설계 원칙에 맞아 개발을 쉽게 할 수 있도록 도와주고, 개발자들이 핵심 로직을 효율적으로 개발할 수 있도록 기본 틀, 공통 프로그래밍 모델과 API를 제공한다. ※ Core (DI, Ioc) : 스프링의 근간. 내가 만든 클래스를 스프링이 직접 관리하여 어플리케이션을 동작하게 한다. 스프링의 밑바탕 판. Spring Framework 핵심 기술 1. 스..

Spring/그 외 2023.01.23

[Database] 레디스(Redis)

들어가기 전... 30년이 넘는 시간동안 RDBMS(Relational DataBase Management System)가 사랑받고 있지만, 대용량 데이터 저장, 비정형 데이터 저장, 빠른 응답시간 등의 새로운 요구사항에 기존 RDBMS만으론 대응하기 어려울 때가 있다. 그럴 때 기존 RDBMS와 차별적인 강점을 갖춘 데이터베이스 관리 프로그램들, NoSql을 찾게 된다. ※ NoSql? NoSql은 기존 RDBMS 방식을 탈피한 데이터베이스를 의미한다. ※ NoSql의 종류 (NoSql은 RDBMS가 아님) - 서로 연관된 그래프 형식의 데이터를 저장할 수 있는 Graph Store - Row가 아닌 Column 위주로 데이터를 저장하는 Column Store - 비정형 대량 데이터를 저장하기 위한 D..

CS/Database 2023.01.23

[Database] 저장 프로시저(Stored PROCEDURE)

저장 프로시저 (Stroed Procedure)란? 실무에서는 프로그램에서 만들어 놓은 SQL문을 저장해 놓고, 필요할 때마다 호출해서 사용하는 방식으로 프로그램을 만든다. 저장 프로시저는 이러한 방식이 가능하도록하는 각 DBMS에서 제공하는 프로그래밍이다. 간단히 말하자면, 여러 쿼리를 하나의 함수로 묶은 것이다. 데이터베이스에서 SQL을 통해 작업을 하다보면, 하나의 쿼리문으로 원하는 결과를 얻을 수 없을 때가 생긴다. 원하는 결과물을 얻기 위해 사용할 여러 줄의 쿼리문을 한 번의 요청으로 실행하면 좋지 않을까? 저장 프로시저는 쿼리문들의 집합으로, 어떤 동작을 여러 쿼리를 거쳐서 일괄적으로 처리할 때 사용한다. → 프로시저를 만들어두면, 애플리케이션에서 여러 상황에 따라 해당 쿼리문이 필요할 때 인..

CS/Database 2023.01.23

Spring(스프링) 주요 어노테이션 정리

프로젝트 하다가 파일 업로드가 안 돼서 몇 주를 에러 찾느라 눈이 빠졌었음. 코드 한줄한줄 다시 읽고, 구글링 오지게 해도 발견 안 되던 원인이 알고보니 @Configuration 어노테이션 안 넣어서 파일을 못 불러오는 거였음. 아 완전 어이없음. 내가 이런 기본도 안 되어 있다니... 암튼 어이없어서 정리한 스프링 주요 어노테이션 정리이다. 내가 보려고 정리하는 거라, 충분한 지식 전달이 잘 안 될 수도 있음. 그러면 내가 하단에 남긴 출처 블로그들 가서 읽어보시길... 스프링 주요 어노테이션 1. @Configuration @Configuration을 클래스에 적용하고 @Bean을 해당 Class의 method에 적용하면, @Autowired로 Bean을 부를 수 있다. 2. @ComponentSc..

Spring/그 외 2023.01.22

[Database] 트랜잭션 격리 수준 (Transaction Isolation Level)

트랜잭션의 격리수준이란? 동시에 여러 트랜잭션이 처리될 때, 트랜잭션끼리 얼마나 서로 고립되어 있는지를 나타내는 것이다. 즉, 간단하게 말해 특정 트랜잭션이 다른 트랜잭션에 변경한 데이터를 볼 수 있도록 허용할지 말지 결정하는 것이다. 격리 수준 (4가지) READ UNCOMMITTED (커밋되지 않은 읽기) (레벨 0) READ COMMITTED (커밋된 읽기) (레벨 1) REPEATABLE READ (반복 가능한 읽기) (레벨 2) SERIALIZABLE (직렬화 기능) (레벨 3) 순서대로 READ UNCOMMITTED의 격리 수준이 가장 낮고, SERIALIZABLE의 격리 수준이 가장 높다. 즉, 아래로 내려갈수록 트랜잭션 간 격리(고립) 정도가 높아지며, 동시 처리 성능이 떨어지는 것이 일반..

CS/Database 2023.01.20

[예외 처리] 회원가입 Custom Exception을 해보자

회원가입을 할 때 생길 수 있는 예외들에는 뭐가 있을까? Custom Exception을 적용시키지 않았던 이 편에 이어서... 기존에 작성했던 예외 처리 코드를 조금 바꿔보았다. Custom Exception을 해보았다. 음... 어찌저찌 테스트 통과하긴 하는데, 문제는, 내가 짠 테스트코드가 틀린 로직일 수도 있다ㅋㅋㅠ 근데 일단 통과는 함... 원래 통과 못했는데, 이것저것 바꾸다보니 됐음. 암튼 회원 이름이 겹치는 중복 회원가입 상황에 대한 예외처리를 해보았다. exception 패키지를 생성한다. 그리고 그 안에 RuntimeException을 상속받는 AppException 클래스를 생성한다. [AppException.java] import lombok.AllArgsConstructor; im..

프로젝트 2023.01.19

[Java] 자바 개념 정리

내가 보려고 정리 중 출처 맨 밑에 적어놨지만 혹시 몰라 위에도 적어 놓음. 주로 참고한 블로그 1, 블로그 2 [Java] Java의 특징을 설명해라 - Java는 객체지향 프로그래밍 언어이다. - 기본 자료형을 제외한 모든 요소들이 객체로 표현되고, 객체지향 개념의 특징인 캡슐화, 상속, 다형성이 잘 적용된 언어이다. - 장점 - JVM(자바가상머신) 위에서 동작하기 때문에 운영체제에 독립적이다. - GarbageCollector를 통한 자동적인 메모리 관리가 가능하다. - 단점 - JVM 위에서 동작하기 때문에 실행 속도가 상대적으로 느리다. - 다중 상속이나 타입에 엄격하며, 제약이 많다. 객체지향이란? - 데이터를 추상화 시켜 상태와 행위를 가진 객체를 만들고, 그 객체들 간의 유기적인 상호작용..

CS/Java (CS) 2023.01.19