전체 글
-
[SSAFY] 싸피 8기 비전공 취업 후기 - 비전공자. 잘 취업할 수 있을까?IT/SSAFY 2023. 8. 6. 15:46
싸피 생활에 대한 회고는 아래 블로그 링크에서...https://blog.naver.com/heo0o0o0o/223309426992 22-23. 대기업 퇴사, 싸피 중도 퇴소, 취업 이야기.그 동안 미뤄왔던 (진지한 척하는) 포스팅을 해보려고 한다. 대기업 퇴사. 30대에 도전한 개발자로의 직무...blog.naver.com 나는 싸피 8기 자율프로젝트 중간에 취업으로 중도 퇴소를 했다. 요즘 경제가 어렵다보니 개발자 취업문도 너무 좁아졌고,실제로 7기부터 취업문이 좁아져 지원자는 엄청 많아졌는데 뽑는 사람은 확 줄어버렸다. 나는 대기업 SI/SM 기업 중 하나에 합격하여 다니고 있는데, 이전에는 3자리수로 뽑았다는데 내 동기들은 약 3-40명 가량이다. 거의 1/4~1/5 토막이 난 셈.심지어 뽑는 인..
-
[MySQL/Java] DB 쿼리 성능개선 (2) 랭킹 조회 속도 개선하기 (5s ➡️ 1s대로 줄이기!)DB/MySQL 2023. 6. 29. 21:59
기능 배경 - 개선 대상 : 랭킹 조회 기능 - 랭킹 조회 api 요청시 해당 게임의 Top3에 대한 정보를 DB에서 조회 ➡️ ① Top3 정보 중 하나가 요청자와 일치할 경우 그대로 정보를 담아 return ➡️ ② Top3 정보에 요청자가 없을 경우, 해당 사용자의 등수와 정보를 DB에서 재조회하여 담은 후 return 기존에 해당 기능을 수행하기 위해 작성한 QueryRepository의 코드는 아래와 같다. QueryDSL을 사용해서 작성했는데.. 아무래도 QueryDSL을 잘 알지 못한 상태에서 코드부터 적어서 부족한 부분이 많아 보인다..! 또, 프로젝트였기 때문에 데이터가 많을 경우를 고려하지 않고 아주 미니미한 목데이터 안에서만 테스트를 했기 때문에, 일단 쿼리로 데이터가 "날라만 오..
-
[MySQL/Java] DB 쿼리 성능개선 (1) test용 mock/bulk data 삽입 방법DB/MySQL 2023. 6. 26. 22:09
Gotcha 프로젝트 리팩토링을 하면서 DB 성능 개선에 도전해보고 싶다는 목표! 굉장히 조그마한 프로젝트였기 때문에 쿼리를 신경 쓰지 않고 작성했는데, 데이터가 몇십, 몇백만 단위로 쌓이게 된다면 문제가 발생할 수 있을 것 같다는 생각이 들었다. 그래서 쿼리 성능 테스트를 진행해보기로 했다. 하지만.. 대량 데이터를 넣는 것부터 배울게 아주 많군요...! 우선 테스트하고자 하는 코드를 간략화 하면 아래와 같았다. @CustomSpringBootTest @AutoConfigureMockMvc class ParticipantControllerTest { @Autowired EntityManager em; @Autowired MockMvc mockMvc; @Autowired ObjectMapper obje..
-
[DB] 저장 프로시저 (Stored Procedure)의 개념과 예시DB/DB Basic 2023. 6. 12. 17:11
저장 프로시저 (SP, Stored Procedure)란? : 준비된 SQL문으로, 재사용이 가능하도록 저장한 SQL문을 의미 - 매개변수를 설정할 경우, 매개변수의 값에 따라 SQL문을 실행시킬 수 있음 사용 이유 1. 성능 향상 - SP 생성 이후, 첫 실행을 하게 되면 최적화, 컴파일 단계를 거쳐 그 결과를 캐시(메모리)에 저장 - 이 후 해당 SP 실행시 캐시(메모리)에 있는 결과를 가져와 사용하므로 실행 속도가 향상됨 - 실행 계획이 이미 최적화되어 있기 때문에, SQL문을 매번 구문 분석하고 최적화하는 오버헤드를 줄일 수 있음 2. 유지보수 및 재사용성 향상 - SP 사용시 복잡한 로직과 비즈니스 규칙을 DB내에 캡슐화 할 수 있음 - 여러 어플리케이션이나 스크립트에서 동일한 SP 호출할 수 ..
-
[Java] Request DTO 불변 객체로 만들기 - JSON 역직렬화Programming/Java 2023. 5. 29. 01:10
들어가기 전에 DTO 혹은 VO 객체가 한 번 생성하고 나서 값이 변경될 가능성이 없다면 Immutable 하게 생성하는 것이 좋다고 한다. Gotcha 프로젝트를 리팩토링하며 불변 객체화할 수 있는 클래스들을 불변 객체화 하는 것을 진행해보려고 한다. 제일 간단한 기능을 기준으로 테스트해보고자한다. 수정전 Controller, Service, Request DTO는 아래와 같다. Repository는 Spring Data JPA를 이용한 기본 메소드를 사용했다. [DuplicateNicknameRequest] *참고) - @NoArgsConstructor는 Jackson에서 리플렉션을 통해 json 데이터로 객체를 생성할 수 있도록 함 - @Builder 는 test code 작성시 객체를 생성하기 ..
-
[Java] 불변 객체(Immutable Object)와 final을 사용해야 하는 이유Programming/Java 2023. 5. 28. 21:20
프로젝트를 진행하며 의존성 주입을 위해 private final을 써왔었다. 그런데 이 final이라는 것에 대해 제대로 고민하고 다른 객체에 사용해본 적이 없는 것 같아 Gotcha 프로젝트를 리팩토링하며 배운 내용들을 포스팅해보고자 한다. 불변 객체(Immutable Object)란? : 객체 생성 이후 내부의 상태가 변하지 않는 객체 ➡️ 한 번 생성이 된 불변 객체는 신뢰할 수 있다. - read-only 메소드만 제공하며 객체의 내부 상태를 제공하는 메소드를 제공하지 않거나 방어적 복사를 통해 제공 - Java의 String은 대표적인 불변 클래스로 String Pool이라는 공간에 String 객체를 보관하고 있음 - 변수에 새로운 값을 할당할 경우 객체의 value가 변하는 것이 아닌 새로운..
-
[DB] 스키마(Schema) 개념 및 계층DB/DB Basic 2023. 5. 18. 11:45
스키마(Schema)란? : 데이터베이스의 구조(개체, 속성, 관계)화되는 방식을 정의 - DBMS이 주어진 설정에 따라 Schema를 생성하고 사용자가 자료를 저장, 조회, 삭제, 변경할 때 DBMS는 자신이 생성한 데이터 스키마를 참조하여 명령을 수행 - 테이블 이름, 필드, 데이터 유형, 엔티티 간의 관계 등 논리적 제약조건이 포함됨 스키마의 3계층 외부(서브) 스키마 (External Schema) = 사용자 뷰 - 개인의 입장에서 필요로 하는 데이터베이스의 논리적 구조 정의 - 하나의 데이터베이스 시스템에는 여러개의 외부 스키마가 존재할 수 있으며 하나의 외부 스크미라를 여러 개의 응용 프로그램이나 사용자가 공용 가능 - DML을 사용해 데이터 이용 개념 스키마 (Conceptual Schema..
-
[DB] 데이터 모델의 종류와 구성 요소 (엔티티, 속성, 관계)DB/DB Basic 2023. 5. 17. 16:25
데이터 모델이란? : 현실 세계 정보들을 컴퓨터에 표현하기 위해 단순화, 추상화하여 체계적으로 표현한 개념적 모형 - 데이터 모델은 데이터 구조를 결정 - 데이터, 데이터의 관계, 데이터의 의미 및 일관성, 제약 조건 등을 기술하기 위한 개념적 도구 데이터 모델의 유형 1. 개념적 데이터 모델 - 현실 세계에 존재하는 개체를 인간이 이해할 수 있는 정보 구조로 표현 - 구축하고자 하는 업무 모델의 핵심 데이터 구조를 큰 그림으로 구성하는 것 - "빅 픽쳐" 모델이라고도 불리며 전반적인 구조와 콘텐츠를 나타내지만 데이터 계획의 세부사항은 표시하지 않음 - 데이터 모델링의 시작점으로 다양한 데이터세트와 조직 전체의 데이터 흐름을 식별 - 논리 및 물리 모델 개발에 대한 상위 레벨의 청사진 2. 논리적 데이터..