TIL 36

대칭키 vs 공개키(비대칭키) 암호화의 차이점

대칭키와 장단점 대칭키는 암호화와 복호화할 때 사용하는 키가 동일하다. 하나의 키를 사용하여 데이터를 암호화, 복호화 하는데 장단점으로는 아래와 같다. 공개키 암호화 방식과 비교했을 때 속도가 더 빠르다는 장점이 있다. 그러나 키를 직접 교환하는 방식이며, 하나의 키로 암복호화 하기에 해당 키가 탈취당했을 때 누구나 암호화된 데이터에 접근할 수 있다. 대칭키 암호화: 암호화와 복호와의 키가 같다. 용도: 데이터의 내용을 숨기기 위함 장점: 속도가 빠르다. 단점: 키가 유츌될 위험이 있어 보안 수준이 낮다. 공개키와 장단점 공개키는 암호화, 복호화할 때 사용하는 키가 다르다. 공개키를 사용하여 데이터를 암호화하고 개인키를 사용하여 복호화 하는데 장단점으로는 아래와 같다. 대칭키 암호화 방식과 비교했을 때 ..

TIL 2023.10.16

[TIL] 시간복잡도 big O 표기법

시간복잡도 O(1) public int sum (int n, int b) { return n+b; }sum 함수는 두 개의 매개변수 n, b를 사용해 n과 b의 합을 반환한다. n과 b의 값에 관계없이 함수는 하나의 더하기 연산을 수행하고 즉시 결과를 반환하기에 입력 값에 관계없이 일정한 수의 작업을 실행하므로 동일한 시간이 걸린다. 시간복잡도 O(log n) - 이진검색 ( Binary Search ) 정렬된 배열에서 효율적으로 검색하는 알고리즘이다. 간단한 예로 1부터 10까지의 배열이 있고 찾는값이 4라고 했을 때 배열의 중간값인 5보다 큰지 작은지 비교하고 또 다시 1부터 5까지의 중간값인 3보다 크거나 작은지 비교하며 동일한 반복을 진행한다. 시간복잡도 O(n) public int sum (in..

TIL 2023.05.29

[Java] 조회기능 성능 개선

JPA를 사용해 조회하는 과정에서 불필요한 컬럼도 조회되는 N+1 문제가 있었고 성능적인 부분에서 효율이 떨어지는 것을 확인할 수 있었다. 필요한 쿼리만 실행될 수 있도록 조회하는 부분에서 수정을 할 필요가 있었다. 그에대한 해결 방법으로 jpql, querydsl 등 다른 방법들을 사용해 얼만큼의 차이가 있나 확인을 하고 최종적으로 코드를 수정할 수 있었다. 1. JPA -> JPQL 2. JPA -> QueryDSL 처음에 JPA에서 JPQL과 QuertDSL로 수정했을 때 차이가 있는 것을 볼 수 있는데 JPQL과 QueryDSL의 경우 거의 차이가 없다고 봐도 무방하다. 쿼리 자체가 크게 바뀐게 아니기에 당연한 일이다. 조금 더 성능 부분에서 개선을 하고싶었고 조회하는 기능이었기에 인덱싱과 캐싱을..

TIL 2023.05.22

[JAVA] 전역 예외 처리

전역 예외처리를 해야한다고 생각한 계기 각각의 도메인에 exception 폴더의 존재로 중복된 코드가 발생했고, 폴더 구조가 복잡하게 보일 수 있는 문제가 있었다. 2. 회원가입 시 클라이언트에서 값을 받아오는 컬럼의 경우 Valid를 사용하여 dto에서 예외 처리를 해주었지만 프론트에 정확한 에러 메시지가 보이지 않는 문제 발생. 해결 방법 1번의 문제에 대한 것은 globalexception폴더를 만들어 각 도메인별 에러 메시지를 출력하는 클래스를 구현했다. 2번의 문제는 service 로직에서 클라이언트가 입력하는 값을 가져와 비교하고자 하는 패턴과 matches 함수를 이용해 해결했다. 결과 & 배운점 기존에는 필요한 기능이나 도메인이 있으면 단순 구현만 했었는데, 프로젝트 규모가 커지면서 더욱더..

TIL 2023.05.15

[회고] 프로젝트를 마치며..

약 5 ~ 6주간의 프로젝트가 끝이 났다. 다양한 분야의 팀원(백, 프론트, 디자인)과 프로젝트가 끝난 시점에서 어떻게 협업을 했고 어떤 부분에서 문제가 있었는지 조금이나마 생각해보는 시간을 가지려 한다. 어색한 첫 만남 & 프로젝트 주제 선정 처음 대화의 시작은 프로젝트 주제였던 것 같다. 각자 생각한 주제나 소소한 얘기를 하며 팀원끼리 말을 많이 했었고 다양한 주제에대해 얘기를 나눈 것 같다. 그 중 우리가 정했던 아이디어는 연구를 위한 지원자를 모집하는 기업/단체와 단기 알바를 원하는 유저간의 매칭을 더 간편하게 도와주는 서비스 였다. 아르바이트의 경우 이미 좋은 어플들이 많고 시스템이 존재했지만, 대학교나 대학원, 기업 등 단순한 연구에대한 테스트를 받거나 다양한 사람들의 생각을 얻을 수 있는 사..

TIL 2023.05.13

[쿼리] JPA & JPQL & NativeQuery

JPA (Java Persistence API) JPA는 데이터베이스에 직접적인 쿼리를 실행하지 않으며 Entity 테이블에 매핑하여 사용한다. 장점 Native Query나 JPQL을 사용해 쿼리를 직접 작성하는 것보다 개발자가 사용하기 쉽도록 자동으로 쿼리를 만들어준다. 기본(Hibernate)으로 쿼리를 자동 생성한다. Entity 테이블에 매핑하는 것은 아래의 설명을 보면 알겠지만 @Entity 어노테이션이 달린 User Entity 클래스의 각 인스턴스 변수들을 users 테이블의 열로 정의 하는 것이다. import javax.persistence.*; @Entity @Table(name = "users") // 쿼리에서 user는 예약어기 때문에 users로 변경. public class U..

TIL 2023.05.11

쿠키, 캐시, 세션

평소에 인터넷을 사용하거나 팀 프로젝트를 진행할 때 쿠키와 캐시 그리고 세션에대해 자주 접하게 된다. 셋 다 사용자에게 편리함을 제공하며 사이트의 성능을 최적화 하는데 필요한 기능들이다. 하지만 서로 비슷한 내용인 것 같고 헷갈릴 수 있다 생각해 이번에 정리를 해보려 한다. 쿠키 (cookie) 사용자의 특정 정보를 사용자의 컴퓨터에 텍스트로 저장시킨 파일이다. 사용자의 로그인 정보 또는 설정 등이 포함되어 사용자에게 편리함을 제공한다. 장점 정보가 저장되어 사용자에게 편리함 제공. 로그인 상태 유지 가능. 사용자의 검색 및 내역을 추적할 수 있어 사이트 관리자에게 유용하다. 단점 저장 용량이 작게 제한되어 있다. 클라이언트 측에 저장되기에 쿠키 도난과 조작당할 수 있기에 보안에 취약하다. 개인정보 보호..

TIL 2023.05.06

[자료구조] 스택 & 큐

스택과 큐는 지정된 순서대로 요소를 관리하고 조작하는 비슷하지만 다른 구조이다. 다른 부분으로 요소의 추가와 제거하는 방식의 차이가 있다. 스택 후입선출(LIFO / Last-In-First-Out): 최근 추가된 요소가 먼저 제거되고 먼저 추가된 요소가 나중에 제거된다. 이해하기 쉬운 예시로 식당에 줄을 서있는데 늦게 온 사람이 먼저 들어가는 것 이라고 생각하면 된다. 출입구가 하나인 박스에 요소를 쌓으며 push : 스택에 data 넣음. pop : 스택 맨 위의 data 제거. -> 가장 마지막에 push 한 data가 가장 먼저 pop 된다. peek : pop과 유사하게 맨 위의 data 반환 -> 스택에서 제거되지 않음. top : 가장 마지막에 추가된 data의 위치 (가장 맨위) 큐 선입선..

TIL 2023.05.05

데이터 정규화

정규화는 데이터베이스에서 데이터를 구성하여 중복, 불일치 및 이상을 유발할 수 있는 기타 문제를 제거하는 프로세스이고, 다음은 발생할 수 있는 이상 현상이다. 이상 현상 삽입 이상(Insertion Anomaly) 불필요한 데이터도 함께 삽입되는 하는 문제 갱신 이상(Update Anomaly) 데이터 수정시 데이터의 일부만 변경되는 데이터 불일치 문제 삭제 이상(Deletion Anomaly) 테이블에서 데이터 삭제시 다른 데이터까지 같이 삭제되는 데이터 손실 문제 이러한 이상 현상을 방지하기 위해 데이터 정규화를 사용하여 데이터를 재구성하고 중복성을 제거하여 각 테이블에 기본 키가 있고 각 데이터 조각이 한 번만 저장되도록 할 수 있다. 이렇게 하면 이상 현상이 발생하지 않도록 방지하고 데이터베이스가..

TIL 2023.05.04

코드 리팩토링

팀 프로젝트에서 기능적인 완성도는 어느정도 끝이 보인다. 하지만 여전히 해야할 일은 많았고 작성한 코드를 보며 부족하다 느낀 부분이 많았다. 코드의 효율이나 안정성 및 테스트에 관한 부분이었고 자연스레 리팩토링을 생각하게 되었다. 처음에는 코드의 가독성과 유지 보수의 용이함에 신경써 아래의 코드를 수정할 수 있었다. 상황 회원 정보를 수정할 때 중복된 코드가 많아 코드가 길어지고 가독성 떨어짐. 문제 모든 값들에대해 if 조건문을 사용해 null체크. 각각의 조건문 안에서 변수를 set 하기에 변수명이 바뀌거나 추가적인 수정 상황이 발생할 때 유지 보수가 어려움. 해결 방법 클라이언트에서 dto로 전체 값을 받아와 개별 값들에대해 체크하는 로직을 없앴다. dto 전체를 한번에 체크해 user를 업데이트하..

TIL 2023.05.01