본문 바로가기

AWS Certified Developer - Associate (DVA-C02) 자격증 취득 AWS 공인 개발자 어소시에이트에 합격하여 간단한 후기를 남깁니다. 0. 타 자격증 난이도 비교현재 보유 중인 자격증끼리 주관적인 난이도 비교DVA-C02 >> 컴활 1급 > 정보처리기사 >> ADSP >> SQLD1.  DVA-C02 공부 동기실무에서 AWS 서비스들을 유지보수하거나 구축할 일이 종종 있습니다. 대부분은 의사결정이 된 이후 주어진 과제를 그때그때 문서를 참고하여 해결했습니다. 그래서 어느 서비스를 왜 이렇게 쓰는지에 대한 고민은 부족하다고 판단했습니다. 이번 기회에 AWS 서비스 목적, 다양한 환경과 상황에서의 통합을 높은 수준에서 공부해 보며 의미 있는 결과물(자격증) 산출까지 목표를 세우게 되었습니다. 제가 도전해볼만한 자격증은 SAA-C03(솔루션즈 아키텍트) 또는 DVA-C02(..
채팅 애플리케이션 만들기 - v2.0 지난 1월 'React 코드 읽기'와 'graphQL Subscription 경험하기' 두 가지 주제로 채팅 앱 토이프로젝트 v1.0을 만들었습니다. 개발기간은 첫 커밋부터 약 2주 남짓으로 퇴근 이후와 주말의 여유시간을 투자하였습니다. 목표했던 경험과 함께 마무리되었지만, 최근 클라우드 및 관련 기술들을 공부하며 이 애플리케이션을 실습용 앱으로 전반적인 개선과 고도화하였습니다. 모든 코드는 github 에서 확인 가능합니다. 요구사항 요구사항은 기능/비기능 요구사항으로 나누었습니다. 기능 요구사항으로는 인증, 인가와 채팅방 목록 실시간 갱신 등입니다. 비기능 요구사항으로는 시스템 구조적인 개선과 컨테이너 이미지 개선 이 있습니다. 1. 실시간 서비스와 api 서비스 분리 2. 컨테이너 이미지 사이즈 개..
채팅 애플리케이션 만들기 - v1.0 새로운 기술을 공부하는 방식으로는 크게 두 가지가 있다고 생각합니다. 하나는 문서를 처음부터 읽으며 개념을 학습하는 교과서 정독형이고 다른 하나는 일단 직접 구현해 보며 학습하는 실용형입니다. 평소의 저는 교과서 정독형에 더 가깝다고 생각하지만 그동안 관심 있던 여러 기술들을 입문(체험)해보는 목적으로 실용형 간단한 채팅 애플리케이션(v1.0)을 만들어 보았습니다.  버전v2.0 2024. 04 - 전반적인 기능 개선v3.0 2024. 08 - 도메인 모델링 기반 리팩토링모든 소스코드는 Github에서 확인 가능합니다. 요구사항 분석이 애플리케이션의 MVP 기능 요구사항은 아래와 같습니다. 1. 유저는 로그인을 할 수 있다. 존재하지 않는 닉네임이면 회원가입으로 취급한다.2. 유저는 방을 생성/참여할 ..
제네릭, 와일드카드 처음부터 끝까지 이해하기[with PECS, <E extends Comparable<? super E>> E max(Collection<? extends E> c)] 특정 타입 E의 컬렉션을 인자로 받아 최댓값을 반환하는 제네릭 한 max 메서드를 만든다면, 선언부는 아래와 같이 설계할 수 있습니다. public static
시간복잡도 - 실생활 예시로 개념잡기 시간복잡도 란 단어를 처음 들어본 입장에서 개념을 소개하고자 합니다. 모든 예시는 현대 컴퓨터의 최적화된 알고리즘과는 다를 수 있지만 개념적으로 이해하기 위한 예시입니다. 기본 개념잡기두 수 a, b의 합에 대해 생각해 보도록 하겠습니다. 간단히 123 + 456라고 해보겠습니다.이를 계산하기 위해서 사람은 각 자리를 더하여 결과를 계산합니다.각 자리를 더하는 과정은 컴퓨터의 계산이 필요한 부분으로 이를 연산이라고 합니다. 위 과정은 3번의 연산을 수행하게 됩니다. 이 3은 입력값의 자릿수와 같습니다.만약 자릿수 n이 커지면 커질수록 답을 도출하는 연산도 많아집니다. 연산이 많아진다는 것은 결과 도출 시간도 오래 걸린다는 얘기입니다. 1자리 수 덧셈보다 20자리 수 덧셈이 더 오래 걸리는 것과 같습니다...
에러 FOR UPDATE cannot be applied to the nullable side of an outer join(postgres) 동시성 제어를 위해 select ... left join ... for update를 사용하여 배타 락을 획득할 때 다음과 같은 에러를 만났습니다. "FOR UPDATE cannot be applied to the nullable side of an outer join" 실행하려 했던 SQL은 대략 아래와 같습니다. SELECT * FROM member LEFT JOIN team ON member.team_id = team.team_id FOR UPDATE; 한 트랜잭션A에서 위 SQL이 실행될 때 team이 조인이 되지 않아서 null 상태로 읽었다고 가정해 보겠습니다. 결과 셋은 아래와 같습니다. 이 트랜잭션이 커밋되기 전에 다른 트랜잭션 B로부터 team_id : 1이 삽입되었다면, team_id ..
트랜잭션 격리수준 4단계 테스트 해보기(mysql innoDB) 트랜잭션은 데이터 정합성을 보장하기 위한 기능으로 논리적인 작업 셋을 모두 완벽하게 적용하거나 원상태로 복구하기 위한 기능입니다. 개발 과정에서 2개 이상의 쿼리가 실행되어야 하는 비즈니스 로직에 트랜잭션 기능을 사용하여 원자성을 보장할 수 있습니다. SQL 표준에서 정의하는 4단계의 트랜잭션 격리 수준도 같이 테스트해보았습니다. 이 글의 목적은 실제 격리 수준별 동작을 테스트해 보는 목적으로 작성되었습니다. DB 환경 & 출처 mysql - version. 8.0.35 - storage engine. innoDB - autocommit disabled postgres - version 14.10 정보 출처 : mysql, postgres 공식문서 및 Real MySQL 8.0 트랜잭션 격리 수준(tra..
JPA N+1문제와 해결방안(2) 지난 글에 이어서 N+1 문제 해결과정을 정리하겠습니다. 4. join과 fetch join Member 오브젝트를 통해 Team 에 접근할 때 발생하는 N+1 문제를 해결하기 위해서는 Member 조회시 데이터베이스에서 관련 테이블을 join 하여 한번에 가져와야합니다. 이를 위해 Repository 레이어에 JPQL 을 사용하는 메서드를 하나 추가하겠습니다. MemberRepository.java 일부 @Query("select m from Member m join m.team t") List findAllJoin(); 다음과 같은 테스트 코드도 작성하였습니다. MemberRepositoryTest.java 일부 @Test public void findAllJoinTest() { List allJoi..
JPA N+1문제와 해결방안(1) ORM 기술을 사용한 애플리케이션에서 흔히 겪는 현상으로 N+1 문제가 있습니다.N+1 문제는 1개의 조회 쿼리에 N개의 추가 쿼리가 발생하는 현상으로 애플리케이션 성능저하의 원인입니다.당시 수백개의 비교적 적은 레코드의 조회 쿼리 실행 시간이 1초 이상 걸리던 레거시 코드를 개선했던 경험을 정리해 보겠습니다. 1편에서는 여러 가지 현상들을 확인하고, 2편에서 해결했던 방식을 소개하겠습니다. 모든 코드는 예시로 작성되었습니다. - JAVA 17- Spring boot 3.1.01. 엔티티 정의1:N 관계의 Team,Member 엔티티를 구성합니다.Member 는 연관관계의 주인으로 멤버변수 중 하나로 Team이 있습니다. 로딩 전략으로는 즉시로딩(Eager)을 사용합니다.Team.javapackage ..
#C5 2021 3회차 정보처리기사 실기 시험 후기 2021 3회차 정보처리기사 후기 (2021.10.16 토요일 오전 9시 시험) 결과 발표났는데 후기는 남기자라고 생각이 들어 간단히 일기 형식으로 남기는 글 선 요약 비전공자/회사원 1달 잡고 공부해서 턱걸이(67점)로 합격 코드 문제는 무조건 공부하자 다 공부하기 보다는 잘 나오는 영역만 공부하는게 좋을 것 같다. (시간대비 효율이 안 나온다.) 생각보다 채점이 후한 것 같다. 자잘한 걱정은 안해도 좋을 것 같다. (ex. select 소문자로 쓰면 틀리나요? 같은...) 0.타 자격증 난이도 비교 내가 가진 자격증끼리 주관적인 난이도 비교 컴활1급 > 정보처리기사 >> ADSP >> SQLD 1. 준비 기간 / 풀어본 기출 정보처리기사 실기의 악명을 들었던 터라 필기 이후 바로 시작했지만 개인적인 ..
예외 TransactionRequiredException: no transaction is in progress, Executing an update/delete query 해결방안 TransactionRequiredException 예외 메시지로 두가지를 경험해보았습니다. no transaction is in progress 와 Executing an update/delete query 입니다. 발생하는 이유에 대해서는 잘 정리된 글들이 많아서, 각 메시지별 해결방법 위주로 작성해보았습니다. @Transactional 어노테이션 누락 확인 트랜잭션으로 관리할 메서드에 종종 어노테이션을 누락한 적이 있습니다. //@Transactional public void update() throws Exception { //... } 트랜잭션 메서드 접근제어자 / 불변 키워드 확인 @Transactional 은 AOP로 구현되는데, 스프링 부트 2.0 이후부터는 기본적으로 CGLib이란 라이브..
#C4 2021 3회차 정보처리기사 필기 시험 후기(+책 관련 정보) 2021 3회 차 정보처리기사 후기 (2021.08.14 토요일 오전 9시 30분 시험) 선 요약 A. 비전공/직장인 2달 잡고 공부해서 여유롭게 붙은 점수로 합격 (80/100) B. 노베이스 1달~1달 반 정도가 적당한 것 같다. C. 책은 시나공, 수제비 둘 다 사면 좋고 꼭 하나만 사면 수제비 추천 1. 준비 기간 / 풀어본 기출 준비기간 단순 합격이 목적이라면 1달 정도 1일 3~4시간 공부로 필기는 딸만 한 것 같다. 풀어본 기출 기출은 개정 후인 2020년 이후 것만 2~3번 돌리며 오답 노트했다. 시험 바로 전 날 2019년 마지막 회 차 기출 연습 삼아 풀어봤다. 전자 문제집 cbt와 구매한 책으로 풀었다. cbt는 가장 최신 기출까지 정리되어있는 장점이 있는 반면, 해설이 빈약하거나 없..