VS코드 - New Terminal - 오른쪽상단 플러스누르고 Git BashGit : 하나의 폴더내에서 코드수정사항단계를 기록하기 위해, 에러발생시 과거코드로 쉽게 되돌아가기 위해Github : 백업과 공유, 협업이 가능한 온라인 코드 저장소pwd : 현재 작업폴더를
미니프로젝트 와이어프레임이 끝나고 역할분담 순서였다. 나는 상단헤더 오른쪽에 OpenAPI를 이용한 날씨정보를 구현하기로했다.기초웹개발종합반 수업에 있는 내용이었기에 수월하지않을까?했는데 생각보다 난항이었다.역할을 수행하기위해 먼저 3회차 강의내용인 fetch를 복습하
팀프로젝트 과제중에, 실시간으로 베이스타임을 입력해보고 싶었다. 기초강의에서 배운게 백틱이랑 +로 연결하는거라,실시간 데이터를 자체로 받고, 입력양식에맞게 가공해야했다. 한자리 숫자라도 십의자리에 0이 붙어야 했기에 관련작업을 해줬다.엉성하긴 하지만, 구현해내서 다행이
팀 미니프로젝트중, 오픈API로 가져온 텍스트 크기가 작아 키우고 싶었다.기초강의에서 수강했던대로 id값을 지정하고(zzz) 스타일태그에 들어가 .을붙이고 입력했는데 안되는것이었다. 왜지?아무리 해봐도 안되길래 결국에는 팀원분께 부탁드려서 일단 급한불은 해결했다.팀원은
저녁 7시 웹개발 기초강의를 듣고, 사전캠프때 포스팅했던 개발용어정리를 다시 가져와봤다. 중요한 키워드를 선정해보고, 모자랐던 내용을 채워보자.Frontend, 클라이언트파일을 보내달라고 요청하는 컴퓨터를 클라이언트라고 한다. 직접적으로 눈에 보이기에 프론트엔드라고도
A. JVM 구성요소컴파일러 : Java -> 바이트코드(.class)Java파일은 컴퓨터가 직접 읽을 수 없다. '해당 운영체제'가 읽을 수 있는 파일로 바꿔준다.자바를 컴파일하면 exe파일을 안만들고 굳이 class파일을 생성할까?: C처럼 exe프로그램을 바로 만
정적배열(Array)과 다르게, 참조형 변수를 저장하기때문에 크기를 굳이 정하지 않고 활용이 가능하다는 장점이 있다.컬렉션 종류 : List, Queue, Set, Map순서가 필요하면 LinkedHashSet합집합, 교집합, 차집합 기능도 가능합집합 : Set1.ad
3주차3-1속성 : 필드 = 행위 : 메서드사용관계, 포함관계, 상속관계캡슐화, 상속, 다형성, 추상화캡슐화(3-9) : 내부 구현내용을 외부에서 알수없게 -> 보안기능, 불필요한 정보 가려 혼란줄이기대신, 노출시켜준 메소드를 통해 접근가능\-> 접근제어자(public
진짜 숨이 턱막혔다. 사전캠프기간에 매일 알고리즘 코드카타를 풀어온 가닥으로는 택도 없고, 주어진 종합문법강의 3주차~4주차 절반내용까진 수강해야 풀기 '시작할 수 있는' Level2-1이었다. Level1을 빨리 끝내고 수강도 다 끝내고 오늘 오후 5시부터 2-1 시
super : 부모 클래스의 멤버에 저장super() : 부모 클래스의 생성자를 가져옴. 가장 첫줄에 써야함.'부모타입 변수 = 자식타입 객체'는 자동 형변환이 일어남이때 부모타입 클래스로 판단되어, 자식 메소드는 못씀자동 타입 변환이 일어난 상태에서, '자식타입 변수
반드시 오버라이딩 되어야한다.추상과의 비교추상 : 코딩중 또는 코딩 후 - 이러이러한 기능의 메서드들이 공통으로 쓰이네? 모으자 (후처리 성격)인터페이스 : 코딩전 - 이러이러한 기능의 메서드들을 공통적으로 쓸거야! 설계를 미리하자 (전처리 성격)오류 : 회복이 불가능
프로세스 내에서 일하는 코드 실행의 흐름(일꾼)싱글쓰레드 vs 멀티쓰레드싱글쓰레드 : 프로세스 내에서 하나의 쓰레드만 실행되는 것. main() 메서드만 실행하는 경우.멀티쓰레드 : 메인 쓰레드에 다른 쓰레드를 더 추가하여 여러개를 실행하는 것장점 : 동시작업 효율로
요구하지 않는 연산자가 들어왔을 때 예외처리하라는 요구사항에 내가 대처한 방식이다. 틀린건 아니지만 뭔가 일차원적이다.반복문안에서 계속 연산을 반복하다 exit입력시 종료해야하는 요구사항을 코딩했다. 역시 틀린건 아니지만.. 굳이 doorstop이라는 변수를 하나 더
오늘 팀과제를 시작하면서 본격적으로 Git을 사용하기를 시작했는데, 이전 팀 과제였던 미니프로젝트에서는 코드가 간단해서 그냥 슬랙으로 합쳤었기때문에 Git사용이 처음이었다😇 오늘 정말 진구 그 자체였다.. 하나하나 다 같이 해결한다고 붙들어주신 팀원분들 정말 감사
지난 TIL에 올라왔던 '꼼꼼하게 예외처리하기'이다. 위 소스는 하나의 변수(x)만 제대로 받을때 까지 돌리지만 이번에 팀과제를 하면서 여러개의 변수를 받아야 할 일이 생겼다. 그래서이렇게 스캐너인스턴스를 늘려가면서 하는 수 밖에 없겠다.. 싶어서, 일단 코딩하기전에
코딩을 하다보면 특정 데이터를 한 자료구조 내에서 Search할 일이 상당히 자주있다. 나는 데이터크기가 그렇게 크지 않으면 그냥 순회하는 식으로 해결해왔는데, 그걸 선호하지 않는 팀원분들이 과반이었다.. 그래서 그냥 리스트나 배열로 해결하자는 내 의견대신, Map을
try문에 오류가 나게되면(예를들어 d를 입력), 처음 버퍼에 d\\n이 들어오고, nextInt가 d까지 읽으면서 입력포맷오류가 발생해 catch문으로 빠진다. 이때 d\\n이 버퍼에 남은상태에서 내려가게되고, next는 \\n 전까지 읽기때문에 버퍼에 남은 d를 받
Java Team Project 마무리단계라서 시간적인 여유가 있었다. 그래서 인프런에 김영한씨가 만든 스프링입문을 들을 예정이었는데, 최종코드리뷰를 하면서 팀원분 한분이 다소 충격적인 말을 했다. 우리 객체지향적으로 못짠게 아쉽네요.아니, 나는 누구보다 객체지향적으로
다형성 : 조상 타입 참조 변수로, 자손 타입 객체를 다루는 것자손 = (형변환 생략 불가 : 멤버수가 많게되는건 생략불가능)조상조상 = (형변환 생략 가능 : 멤버수가 적게되는건 생략가능) 자손겉형변환?에 속지말기 : 실제 인스턴스가 무엇인가를 봐야함instanceo
난해하다 난해해 영어든, 학습지로 잠깐했던 일본어든, 컴퓨터언어인 Java든, 오늘 새로배운 Spring이든..새로운 언어를 배우는 처음은 너무 힘들다.. 익숙해질거라 믿고 하는거지뭐..😇🤧 오늘 배운걸 정리하자: 빌드 자동화 시스템빌드란, 소스코드를 실행가능한 것
메모장 프로젝트 CRUD 구현하기 DTO란 무엇일까? Date Transfer Object. 데이터 전송 및 이동을 위해 생성되는 객체 Client에서 보내오는 데이터를 객체로 처리할 때 사용됨 Entity 클래스의 책임과 확실하게 분리하기 위해 사용됨 RequestD
처음 자바를 배울 때, 어디서 시작해서 어떻게 흘러가는지 파악하기위해 애를 썼었다. 익숙해지려고하니 Spring을 시작하게되어, 마찬가지로 어디서부터 프로세스가 진행되는지 감을 이제 초큼 잡은 정도.. 아마 다음과 같이 이루어 지는듯 하다.A. 프론트엔드로부터 다양한
IoC와 DI 1. IoC(제어의 역전), DI(의존성 주입) 이해하기 Spring의 IoC와 DI DI라는 디자인패턴을 통해, IoC라는 설계원칙을 지킨다. 의존성이란? 요소를 추가할때, 코드 변경사항 개수와 의존성은 비례 주입이란? 필요로 하는 객체를 해당객체에 전
Spring Data JPA 1. SpringBoot의 JPA SpringBoot 환경에서의 JPA Spring의 트랜잭션 @Transactional 영속성 컨텍스트와 트랜잭션의 생명주기 트랜잭션 전파 2. Spring Data JPA란 무엇일까? Spring Dat
사용자 관리하기 회원가입 구현 회원가입 설계 @Enumerated(value = EnumType.STRING) EnumType을 DB 컬럼에 저장할 때 사용하는 애너테이션 EnumType.STRING 옵션을 사용하면 Enum의 이름을 DB에 그대로 저장 패스워드
JPA 한 걸음 더 나아가기 Entity 연관관계 프로젝트 생성 주문 APP DB table 설계 DB table간의 연관 관계 DB table간의 방향 Entity간의 연관 관계 1대1 관계 @OneToOne 단방향 관계 양방향 관계 연습하기 N대1 관계 @Man
정말정말 쉽지않다8ㅅ8. 3일동안 처음 접해보는 적지않은 양의 지식을 머리에 넣고, 앞으로 남은 일주일동안 이리저리 부딪혀가며 적용하는 시간이 남았다.1단계 요구사항중인 POST API를 만들고 테스트를 하는데, HttpMediaTypeNotAcceptableExcep
입문과제때 추가구현이었던 페이지네이션. 스프링 입문강의와 마찬가지로 숙련강의에서도 가르쳐주지않길래 안중요한건가보다 하고 넘어갔다가, 숙련과제에선 필수구현으로 있길래 구글링해가며 찾아내서 해결하였다.param으로 페이지 개수와 크기값을 받아오고, Pageable객체를 만
JPA에서 N+1문제란?요청이 1개의 쿼리로 처리되길 기대했는데, N개의 추가 쿼리가 발생하는 현상(사실1+N)연관관계 이슈에서 자주발생지연 로딩일때크루Repository.findAll()을 날리면크루를 한명씩 조회하는 쿼리는 1개만 날아감List<할일>목록은 지
처음 설계한 API 명세서에 변경 사항이 있었나요? A. 네.. 엄청 많았습니다..변경 되었다면 어떤 점 때문 일까요? 첫 설계의 중요성에 대해 작성해 주세요!단계별로 풀어라는 튜터님 권장사항을 따르다보니, 문제 요구사항이 복잡해지면서 그에 따라 API명세 뿐만아니라
숙련단계 과제를하다 responseDto의 필드를 피치않게 늘려야할 일이 생겼고, 특정단계 요구사항에서 필요한 필드값만 노출되게 해야했다.null값인 값들도 노출되서 곤란했는데, 위처럼 @JsonInclude애노테이션을 NON_NULL로 주면 NULL값이 아닌 필드값만
1.Transaction(readOnly = true)트랜잭션을 어디에 걸고, 어디엔 안걸고 , 어디서부터 어디까지 걸어야하는지 고민해 보기2.@ManyToOne은 웬만하면 fetchtype Lazy걸어줘야함데이터 로딩 효율 제고3.RESTful한 API를 위하comm
숙련주차 추가과제 구현 요구사항을 코딩하던 중, 와 같이, 반환 status code를 지정해주는 디렉션이 있었다. 강의내용에는 없던 내용이라 헤맸는데, ResponseEntity라는 클래스를 알게되었다.간단한 예시이다. 이렇게 Status값을 OK로 리턴하면 코드20
RESTful한 API명세 설계하기 실전로직구조를 생각하면서 짜야한다. 이미 로그인한 상태라면 굳이 URL에 @PathVariable로 파라미터를 받을 필요가 없다. JWT에서 claims로 받아오면 되기 때문이다.식별키를 @PathVariable으로 받아오는 상황이라
팀과제중 다음과 같은 요구사항이 주어졌다.형식에 관한 요구사항인데, 정규식을 검색하고 찾아서 service단에서 조건을 주고 필터하도록 처음에 작성했다.튜터님에게 피드백받았는데, service까지 넘어갈 필요없이 dto단에서 필터하는게 어떻겠냐는 조언을 주시면서 @Va
맞닥뜨린 문제 :에러나 예외가 발생하면 인텔리제이 run창에는 오류메세지가 뜨는데, postman응답으로는 볼수가 없어서 이걸 해결하고 싶었다.방법을 찾던 중 같은 팀원분이 GlobalExceptionHandler라는 툴을 오늘 실습반 수업에서 배워오셔서 요긴하게 써먹
뉴스피드 과제를 준비하면서 회원탈퇴 로직에 대한 처리를 팀원과 고민했다.'탈퇴한 사용자의 아이디는 재사용할 수 없고, 복구할 수 없다'를 해결하기위해 생각한 방법은1\. 테이블에서 해당 유저 row를 직접 삭제하고, 따로 삭제된 유저만을 모아놓는 테이블을 하나 더 만든
현중JWT 기능이 용이했다. 로그인 기능에 계속 사용하면 좋겠다.application.propertise의 MySql을 이용하는 세팅을 할때, ${}로 공용형식값을 주고 환경변수 세팅으로 통용하는게 인상깊었다.대현@Valid, Argument Resolver , Glo
팀과제가 끝나고 KPT회고를 하며, 뛰어난 실력으로 팀을 이끌어준 팀원분의 피드백이 '주석좀 달아요!'였다. 팀원분이 굉장히 주석을 깔끔하게 달아놓으셔서 나도 카피해서 쓰긴했다ㅎ 그분이 Javadoc이란걸 알려주셔서 한번 알아봤다.(Controller에서만 사용 가
작은 단위로 쪼개서 각 단위가 정확하게 동작하는지 확인하는 기법빠르게 작성 가능, 정확한 원인 파악 빠르게 가능@BeforeEach : 각각의 테스트코드 실행 전 수행@AfterEach : 각각의 테스트코드 실행 후 수행@BeforeAll : 모든 테스트코드 실행 전
AOP는 핵심기능과 부가기능(횡단관심사)를 분리해서 관리하는 것실제로 실행되는 부가기능(횡단관심사)어드바이스가 적용되는 범위(를 선택하는 규칙)어드바이스가 적용되는 객체포인트컷이 가리키는 실제로 어드바이스가 적용되는 지점(대게 method)어드바이스 + 포인트컷해당하는
심화주차 개인과제 AOP구현파트였다.JWT에 담겨있는 사용자 아이디, 현재시각, API URL을 로그에 찍는게 과제였다.현재시각은 LocalDateTime.now()로 간단히 해결했는데,문제는 사용자 아이디와 URL를 가져오기위해선 HttpServletRequest가
로직상 테스트에서 예외가 일어날 부분이 없는데, 자꾸 List.of(user)를 인식하지 못하는것 같아 답답했다. 튜터님도 바빠보이시고 해서 혹시나 하는 마음에 GPT한테 물어봤는데, 똑똑하다 이자식.. 다음은 해결을 제시해준 GPT의 전문이다. 에러 메시지 "담당자만 댓글을 달 수 있습니다."가 발생하는 이유는 테스트 코드에서 설정한 userList...
Docker란?컨테이너 개념을 이용하여, 개발 환경 설정을 자동으로 세팅하게 도와주는 툴컨테이너 : 어플리케이션에 필요한 환경 설정들을 모아서 패키징하고 이를 다른 컨테이너와 독립된 환경에서 실행 할 수 있도록 하는 기술Docker 이미지란?내가 어떤 세팅으로 할것인
Repository 관련 테스트 코드 작성중 다음과 같은 에러를 맞닥뜨렸다.Syntax error in SQL statement \~\~~ expected "identifier";발생원인은 예약된 키워드(나의 케이스는 user)를 식별자로 사용하는 것이다.즉 'user
Key-value 형식으로 데이터를 저장합니다.초당 수백만 요청 실행이 가능합니다. ←→ ( RDBMS는 일반적으로 초당 수천에서 수십만개 처리 가능)Disk가 아닌 Memory에 데이터를 저장합니다.Memory에 저장된 데이터는 휘발성이 있습니다.싱글 쓰레드에서
requestDto에 LocalDateTime을 값으로 받아야 하는 경우가 있었다.해당타입의 내츄럴?한 값은 0000:00:00T00:00:00.0000+00:00 이라서 API에 입력하기 굉장히 난감했다.튜터님께 여쭤보면서 서칭한 결과, 사진처럼 @JsonFormat
Server Mode직접 외부에 서버프로그램(엔진)을 설치하는 방식애플리케이션 실행여부와 상관없이 엔진은 구동된다어플리케이션이 종료되어도, 데이터가 사라지지 않음In-memory Mode내부에 서버프로그램(엔진)을 설치하는 방식build.gradle 및 applicat
EntityManagerFactory와 EntityManager 개념에서 thread-safety(쓰레드 안전성)가 중요한 이유는 Java 에서 데이터베이스에 접근하는 방식과 관련이 깊습니다. 쓰레드 안전성은 여러 쓰레드가 동시에 객체에 접근하더라도 객체의 상태가 올바
kafka를 쓰는 이유 : 하나의 데이터를 여러 서비스가 처리하기 위해서일반적인 API로 호출하는 방법의 문제는 '만약에 못받으면? URL주소가 바뀔때마다 바꿔줘야해 매번?'각 서비스에서 데이터를 끌어오는 방법의 문제는 '어떻게 모니터링을 할 것인지?, 주기를 어떻게
On-premise : 조직 내부에 설치되고 유지보수되는 서버, 클라우드 서비스와 대조적IAM(AWS Identity and Access Management) : AWS에서 사용자, 그룹 및 역할을 생성하고 관리하여 리소스에 대한 액세스를 안전하게 제어인증, 권한부여,
BOOTSTRAP_SERVERS_CONFIG 다음에 들어가는 인자는 도커주소?와 포트번호Comsumertopics : 데이터 가져올 가져올 토픽이름groupId : 컨슈머그룹 이름Producer데이터를 전송하는 API예제 코드localhost:8989로 띄웠을 떄 나오
Optional은 Java 8에 도입된 클래스인데, null을 안전하게 처리하기 위해 사용된다. 기존에는 어떤 메서드가 값을 반환할 때 값이 없으면 null을 반환하는 방식으로 처리했는데, 이 방식은 null을 제대로 처리하지 않으면 NullPointerExceptio
트랜잭션 부분을 불합격했다. 좀더 알아보자.정의 : 여러가지의 작은 작업단위들을 하나의 논리적인 큰 작업단위로 묶는 것ACIDAtomicityAll or Nothing, 모두성공 or 모두실패, 중간에 SQL문이 실패하면 지금까지 작업을 모두 취소하여 rollback한
비동기적 데이터 흐름을 처리하는 프로그래밍 패러다임.대규모 데이터 흐름이나 빠른 응답이 필요한 시스템에서 사용.비동기 및 논블로킹 방식을 사용하여 서버가 더 많은 요청을 동시에 처리할 수 있음.전통적인 MVC 방식: 동기적이고, 하나의 요청에 대해 쓰레드를 계속 사용
@AuthenticationPrincipal이 Spring Security에서 인증된 사용자 객체를 SecurityContextHolder로부터 바로 주입해주는 표준 방식@Auth 어노테이션을 사용했을 때는 별도의 커스텀 방식으로 인증 객체를 주입@Authenticat
Spring Boot에서 빈(bean)이 기본적으로 싱글톤(Singleton)으로 등록되는 이유는 의존성 주입(DI: Dependency Injection)과 애플리케이션 성능을 고려한 설계 원칙 때문싱글톤 빈이란 애플리케이션 구동 시 딱 한 번만 생성되고, 애플리케이
도메인 주도 개발(Domain-Driven Design, DDD)은 복잡한 소프트웨어 시스템을 개발할 때 도메인의 비즈니스 로직과 요구사항에 중점을 두고 설계하는 접근 방식입니다. DDD는 도메인의 전문가(비즈니스 사용자)와 개발자가 긴밀하게 협력하여, 소프트웨어가 도
동시성 제어 기법. 한 트랜잭션이 특정 작업을 수행하는 동안 다른 트랜잭션의 접근으로부터 보호하는 방법.데이터의 일관성을 보장하고, 동시에 수행되는 여러 트랜잭션간의 충돌을 방지비관적 락 : 충돌이 자주 일어날 것이라 판단. 테이블이나 로우에 @Lock장점 : 낮은 충
Slack Api에서 제공하는 webhook기능을 사용했다. 발급받은 URL을 properties에 입력헤더와 메세지를 생성하고, POST요청을 보내는 방식이다.알림설정하고싶은 API가 수행되고 알림기능이 실행될수 있도록 만든 예시(Controller계층에서 설정)
Service계층에서 비관락 설정Repository계층에서 비관락 설정 : @Lock 어노테이션 입력Entity계층에서 낙관락 설정 : @Version 어노테이션 입력트러블슈팅낙관적 락 테스트를 진행하는데 자꾸 고정개수로만 실패케이스가 발생해서 원인을 찾아보던중, 업데
성주 : 하루에 한번 약속된 시간에 팀미팅을 통해서 멤버들의 진행현황을 서로 파악하고 있었다. 회의를 바탕으로 요청할 자료나 회의할 내용을 자연스럽게 서로 인지하게되어 코드를 이미 만든 코드를 다시 수정할 일이 많이 없었다.대현 : 자기 역량보다 한스텝 더 높은 목표를
Spring Data JPA에서 인덱싱(Indexing)은 데이터베이스 테이블에서 특정 열(column)에 대한 검색 성능을 최적화하기 위한 중요한 개념입니다. 인덱스는 데이터를 빠르게 조회할 수 있도록 도와주는 데이터 구조로, 특히 대규모 데이터셋에서 검색 성능을 크
대학 졸업 후 3년동안 전문직시험에 응시했지만 돌아온 결과는 불합격이었습니다.잠깐의 방황을 겪은 뒤, 털어내고 다른 직업을 탐색하는 시간을 가졌습니다.부모님과 여러 차례 대화를 나눈 끝에 직업교육에 도움이 되는 내일배움카드에 가입하게 되었습니다. 이후 다양한 교육 과정