5월 중순에 자격증 시험을 응시했는데, 시험 결과가 나와 후기를 작성해보려 합니다. SQLDSQLD는 한국데이터산업진흥원에서 주최하는 시험을 통해 획득할 수 있는 자격증입니다. 학부 3학년 데이터베이스 강의를 수강했기도 하고 교수님께서도 자격증 시험 보는 것을 추천하셨던 기억이 있어 응시했습니다.시험 준비는 SQLD 준비하시는 분들에게는 유명한 노랭이 책을 통해 준비했습니다. SQLD 출제 내용은 데이터 모델링의 이해 과목과 SQL 기본 및 활용 과목으로 구성됩니다. 앞 과목에서는 데이터베이스 이론을, 이후 과목에서는 SQL 관련된 문제가 출제됩니다. SQL은 기본적으로 다룰 수 있기 때문에 크게 고려하지 않고 이론적인 부분을 공부하려고 했습니다.전공자라면 학부 시절 학습한 내용이 주로 출제되기 때문에..
AWS 프리티어AWS 프리티어란 AWS에서 계정 생성일로부터 12개월 동안 여러 서비스를 무료로 사용할 수 있도록 제공해주는 일종의 맛보기 서비스라고 할 수 있습니다. 주요 서비스는 AWS EC2, AWS S3, AWS RDS 가 있습니다. 자세한 내용은 우측 링크를 통해 확인하실 수 있습니다. AWS 프리티어 무료 클라우드 컴퓨팅 서비스 - AWS 프리 티어이러한 프리 티어 혜택은 AWS 신규 고객에게만 제공되며 AWS 가입일로부터 12개월 동안 유효합니다. 12개월의 무료 사용 기간이 만료되거나 애플리케이션 사용량이 프리 티어 범위를 초과할 경우aws.amazon.com 무료라고 했잖아요..프로젝트를 위해 AWS 프리티어를 사용하던 중 비용 발생 이메일이 와서 청구서를 확인해보니 실제로 과금이 되었..
산학 협력 캡스톤 프로젝트를 진행하던 중 다음과 같은 오류가 발생했습니다. org.hibernate.NonUniqueResultException: Query did not return a unique result: 3 results were returned 쿼리를 통해 find 하는 메서드에서 발생한 오류인데 처음 보는 종류의 오류라 확인해보았습니다.해당 오류를 발생시키는 메서드는 아래의 메서드입니다. 해당 프로젝트는 SolveHistory와 SolveHistoryDetail 엔티티가 존재하는데, 1:N 관계를 가지고 있습니다.메서드는 SolveHistoryDetailRepository에 포함되는 메서드인데, 해당 메서드를 통해 받을 수 있는 클래스가 하나이기 때문에 발생하는 오류라고 합니다. 해당 문제..
프로젝트를 순탄하게 진행했을 때, 프론트에서 요청이 왔습니다. 😱: 올바른 요청을 했는데 500 에러가 발생해요!! 로그인 파트에서 발생한 에러인데, 문제는 커스텀 에러를 반환하지 않았던 것입니다. 백엔드에서는 도메인, 에러 종류별로 커스텀 에러 코드를 반환하도록 하는데 이 경우에는 500을 반환하여 이유를 알 수 없었습니다. (스웨거에서는 너무 잘 작동하고...) 보통 로컬에서 개발할 때, 이런 상황이 발생하면 콘솔에 찍거나 디버그를 돌리는 것이 가장 쉬운 방법이지만, 서버 배포된 상황에서 발생하는 에러는 할 수 없으니 로그를 까보기로 했습니다! 저희 프로젝트의 시스템 아키텍처는 위와 같습니다. 따라서 도커 로그를 확인하게 되었습니다. 방법은 다음과 같습니다. 1. docker ps를 통해 CONTAI..
지난 HTTP 완벽 가이드 스터디에 이어 오브젝트 스터디를 마쳤습니다. 이번 포스팅에서는 오브젝트를 읽으며 배운 점과 느꼈던 부분을 회고로 풀어보겠습니다. 오브젝트 선정 이유 객체지향 원리와 이론들이 일상에서 내가 작성하는 코드와 어떤 관련이 있는지 의문을 가졌다면 이 책을 통해 많은 해답을 찾을 수 있을 것이다. - 이일민님 - 책을 오브젝트로 선정하며 달성하기로 했던 목표는 "객체지향에 대한 부족함을 채우기" 이였습니다. 객체지향 프로그래밍 언어인 자바를 사용하고, 자바를 더욱 객체지향스럽게 사용할 수 있는 스프링 프레임워크를 사용하며 중간중간 겪는 어려움과 에러는 객체지향의 개념을 이해하지 못했기 때문이라고 생각합니다. 정확하게는, 개념을 알지 못하는 것이 아닌 개념과 설계에 있어서의 갭을 이겨내지..
트랜잭션이란? 트랜잭션(Transaction) 거래 라는 의미를 가짐 데이터베이스의 상태를 변화시키기 해서 수행하는 작업의 단위 예시로 보는 계좌 이체에서의 트랜잭션 A가 B에게 10,000원을 송금한다. A의 계좌 10,000원 감소 B의 계좌 10,000원 증가 만일 A의 계좌에서 돈만 감소하고, B의 계좌에 돈이 증가되지 않는다면? → 멸망~~~ 이처럼 트랜잭션은 일련의 과정이 하나의 동작처럼 수행되어야 한다. 트랜잭션의 특징 → ACID 원자성(Atomicity) - 트랜잭션 내에서 실행된 작업은 하나처럼, 모두 성공 or 실패 일관성(Consistency) - 모든 트랜잭션은 일관성 있는 데이터베이스 상태를 유지 격리성(Isolation) - 동시에 수행되는 각 트랜잭션은 서로에게 영향을 미치지..
데브코스에서 진행한 HTTP 스터디를 마친 후 작성하는 회고입니다 왜 HTTP 스터디? 스터디 주제로 HTTP를 선정한 이유는 HTTP가 백엔드 개발자라면 알고있어야 하는 지식이기 때문입니다. 애플리케이션과 통신할 때, 서버끼리 통신할 때 모두 HTTP에 기반을 두고 있습니다. 웹 프레임워크들도 HTTP를 기반으로 구현되어 있는데, HTTP를 잘 알지 못한다면 이를 깊이있게 이해할 수 없을 것 입니다. 스터디 이전에는 스스로 HTTP에 대한 지식이 부족했다고 생각했었는데, 스터디를 진행하며 기존에 알고있는 지식이 맞는지를 확인하고 현재 사용하고 있는 웹 기술에 필요한 HTTP 지식을 습득하는 것이 이번 스터디의 목표였습니다. 스터디 방식 스터디는 9회에 걸쳐 1, 2, 3, 4, 5, 7, 11, 12,..
캐시 웹 캐시 자주 쓰이는 문서의 사본을 자동으로 보관하는 HTTP 장치 웹 요청이 캐시에 도착했을 때, 캐시된 로컬 사본이 존재하면 캐시로부터 제공된다. 장점 불필요한 데이터 전송을 줄인다. → 네트워크 요금 비용 감소 네트워크 병목을 줄여준다. 원 서버에 대한 요청을 줄여준다 → 서버의 부하를 줄임, 빠른 응답 가능 거리로 인한 지연을 줄여준다. 캐시 적중, 부적중 캐시 적중 캐시에 요청이 도착했을 때, 그에 대응하는 사본이 있다면 요청이 처리 캐시 부적중 대응하는 사본이 존재하지 않다면, 요청이 원 서버로 전달됨 캐시 재검사 캐시에 존재하는 사본이 원 서버 콘텐츠와 일치하지 않을 수있다. 일치하는지 확인하는 과정을 재검사(Revalidation)이라고 함 성공한 재검사(느린 적중) - 원 서버의 콘..
3. HTTP 메시지 메시지의 흐름 HTTP 메시지 HTTP 애플리케이션 간 주고받은 데이터의 블록 클라이언트, 서버, 프록시 사이를 흐른다. 메세지의 방향 - 인바운드, 아웃바운드, 업스트림, 다운스트림 메시지는 원 서버 방향을 인바운드로 하여 송신된다. 아웃바운드 - 트랜잭션 방향을 표현하기 위한 용어, 클라이언트로 향하는 방향 인바운드 - 트랜잭션 방향을 표현하기 위한 용어, 서버로 향하는 방향 다운스트림으로 흐르는 메세지 발송자와 수신자의 대한 것 업스트림, 다운스트림 발송자 → 수신자 형식이 다운스트림, 반대는 없다. 메시지는 항상 다운 스트림으로 흐른다. 메시지의 각 부분 메시지 구조 시작줄 - 어떤 메세지인지 서술, 아스키 문자열 헤더 - 속성, 아스키 문자열 본문 - 데이터를 포함할 수도,..
템플릿 콜백 패턴은 전략 패턴의 변형 패턴입니다. 예시 코드를 제시하며 전략 패턴 이전의 코드 -> 전략 패턴 코드 -> 템플릿 콜백 패턴 코드 의 변경점을 확인해보겠습니다. 전략 패턴 이전 코드 V1 class BeforeStrategyV1 { void someMethod1() { System.out.println("A") System.out.println("이 부분이 핵심 1 메서드"); System.out.println("C"); } void someMethod2() { System.out.println("A"); System.out.println("이 부분이 핵심 2 메서드"); System.out.println("C"); } } 해당 코드를 보면 someMethod에 공통되는 부분이 있고 그 사..