짧고 점진적이며 작은 정보를 일관성 있게 배운다. 이 경우 부모 클래스의 parent 객체는 자식클래스에서 오버라이딩된 메소드를 쓸 수 있다. 반면, 자식클래스에서 새롭게 정의된 메소드는 사용하지 못한다. parent객체는 child 자식 클래스의 behavior2
IntStream의 인터페이스를 선언하고 Arrays.stream(컬렉션 배열 매개변수); 를 대입받는다 업캐스팅 한번 더 쓸 수 없음인터페이스로 선언하는 이유(IntStream) -> 자식클래스를 갈아끼우기 편함(내 생각 - 다형성 실현하기 위함)배열 , 컬렉션 대상
내부 클래스의 종류 1.인스턴스 내부 클래스2.지역 내부 클래스3.정적 내부 클래스4.익명 내부 클래스특징: 1.클래스를 감싸고 있는 외부클래스와 밀접한 연관이 있다. 2.다른 외부클래스에서 전혀 사용할 일이 많이 없을때 사용한다.3.주로 private으로 선언한다.
제목과 본문을 빈 행으로 구분제목 50글자 이내 제한제목의 첫글자는 대문자제목 끝에는 마침표를 넣지 않음제목은 명령문 사용 과거형 X본문 각 행 길이 72자 내어떻게 보다는 무엇과 왜를 설명Separate subject from body with a blank line
팩토리 메서드 패턴은 객체를 동적으로 생성하는데 정형화된 객체지향 디자인 패턴이다. 객체를 생성하는 코드를 클라이언트 코드와 분리하여 객체를 생성하고 반환한다. 클라이언트 코드는 객체생성에 대한 복잡한 코드를 이해할 필요없이 단순화된 인터페이스로 상호작용한다. > 클
MVC패턴에 대해서 그동안 들어보고 했지만 확실한 이해를 하지 못한채 코드에 적용시키고 있었다. 그래서 오늘 확실히 이해하고 넘어가고자 했다. Model : 데이터, 비즈니스 로직을 관리한다. View : 화면에 ui 나타냄 모델의 데이터를 받아 데이터를 ui위로 출
ㄹ
디자인 패턴을 공부하는 이유는 뭘까? 이번 팀과제 지난주 개인과제를 거치며 디자인 패턴중 factory Method, adapter , singletone을 공부하였는데 이것들을 적용하지는 못했지만 어떻게 코딩하면 좋을지 아이디어를 얻을 수 있었다. 이 부분 덕
.java 파일은 컴파일러에 의해 .class 파일로 바뀐다. 자바 바이트 코드로 번역이 된다.java바이트 코드는 JVM이 읽고 실행한다..java 파일 : 자바 프로그래밍 언어로 작성된 소스 코드 파일의 확장자자바 컴파일러 : 소스코드를 바이트 코드로 바꾸는 역할을
클래스를 선언할때 Lombok을 이용해 클래스를 선언하면 편리하게, 읽기 쉽게 코드를 짤 수 있다. 코드는 gradle의 Tasks->build->build를 누른 후 build파일에 생성되어 있다.@RequiredArgsConstructor : final로 선언한
데이터 베이스를 직접 다룰때 문제점 1)DB만들기2)애플리케이션에서 SQL문 작성3)SQL을 JDBC를 사용해서 직접 실행해줘야 한다.4)SQL 결과를 객체로 직접 만들어줘야 한다.sql을 직접 수정해야 한다. 코드 한줄씩 더 추가된다. sql작성에 시간이 많이 든다.
나의 계좌에서 다른 계좌로 이체할때, 돈을 인출하는 SQL 명령문과 계좌 B로 돈을 입금하는 SQL 명령문이 실행된다. 이를 트랜잭션으로 처리하려면 이 두 SQL 명령문을 하나의 트랜잭션에 묶을 수 있다. 트랜잭션은 두가지 특성이 있다. 처음 언급했다시피 성공하면 커밋
영속 상태란 JPA에서 관리하는 엔티티 객체가 영구 저장소(예: 데이터베이스)에 저장되었거나 저장될 예정인 상태를 나타낸다.즉, 영속 상태의 엔티티 객체는 JPA가 관리하며, 객체의 변경 사항이 자동으로 데이터베이스에 반영된다.일반적으로 영속 상태로의 전이는 Enti
REST와 API가 합쳐진 말이다. REST(Representational state Transfer)는 API작동방식에 조건을 부과하는 소프트웨어 아키텍쳐이며 웹 기반 애플리케이션에서 자원을 다루는 데 사용되는 아키텍처 스타일이다. API(Application Pro
자바의 스트림은 컬렉션과 배열 등의 데이터를 다루는데 사용되는 시퀀스이다. 스트림은 요소들의 연속된 흐름을 나타내며, 이를통해 데이터를 조작하고 처리한다. 스트림은 크게 두가지 유형의 작업을 수행한다. 중간 작업(Intermediate Operations) : 스트
entity 클래스는 db의 테이블과 매핑되어 JPA에 의해 관리된다.이 xml 파일은 데이터 베이스와의 연결, 엔티티 매핑, hibernate를 통한 테이블생성 설정을 담고 있다. persistence - unit name = "memo"라는 이름의 persisten
@Autowired : 객체간의 의존성을 자동으로 주입하는데 사용한다.가독성과 명시성자동 구성유지 보수 및 테스트 용이성Spring은 DI를 통해 결합도를 줄이고 유연한 코드를 작성하도록 돕는다.Spring IoC(Inversion of Control) 컨테이너에 의해
엔터티들을 더욱 쉽게 조작하기위한 공간이다.JPA에서 엔터티들을 관리하는 환경, 이 객체들의 생명주기를 추적 관리한다.논리적인 캐시 역할, 엔터티 객체의 변경을 감지하고 데이터 베이스에 동기화 한다.논리적인 캐시 역할 : 엔터티를 데이터 베이스에서 읽어올때 영속성 컨텍
Enum 열거형은 일정한 상수들의 집합을 정의하는 데이터 타입이다. Java enum클래스는 서로 관련있는 상수들을 하나의 그룹으로 모아 정의할때 사용된다.Enum은 코드를 보기 쉽게 하고, 유지보수하기도 쉽게 한다. 주로 상태, 옵션, 설정등을 나타내는데 사용된다.e
열거형은 switch문과 자주 쓰인다. 코드량을 아낄 수 있고 가독성도 좋아진다. 열거형 상수는 생성자를 통해 초기화 될 수 있다.상수에 대한 초기 데이터를 설정할 수 있다.상수의 동작 변경을 할때 사용한다. 이를 통해 상수가 다른 방식으로 동작하도록 설정할 수 있
음양더하기 문제에서 다른 사람들이 풀어 놓은 것을 보았는데 그 중 눈에 띄는 답을 보았다. AtomicInteger와 Stream의 reduce() 함수를 이용해서 문제를 풀이했는데 참고로 나의 코드는 이러하였다. stream을 이용해서 풀려고 하였는데 아직
🚫 예외처리 1. 예외처리 키워드 try : 예외가 발생할 수 있는 코드 블록을 try 블록 안에 작성한다. catch : try 블록에서 예외가 발생하면 해당 예외를 처리하기 위해 catch 블록을 사용한다. catch 블록은 예외 유형과 일치하는 예외를 처리하고
@PostMappting url 엔드포인트 호출되고난 후 과정 알아보기 🚛 호출되고 리턴되는 과정 스프링 프레임워크에서 @PostMapping으로 지정된 엔드포인트의 메서드가 호출되면, 해당 메서드는 클라이언트로부터 들어온 HTTP 요청을 처리하게 된다. @Re
자바 표준 API(응용 프로그래밍 인터페이스)데이터베이스 관리 시스템(DBMS)과 통신하여 데이터 CRUD가 가능케함표준 API이다. 대부분의 RDBMS에 대한 드라이버가 제공되어 일관된 방식으로 상호 작용할 수 있다. -> 데이터베이스 종류가 바뀌어도 쿼리문이 실행됨
@Configuration : 자바 기반 설정 클래스를 표시하는데 사용된다. spring 애플리케이션의 설정을 포함하고 , 빈의 생성 및 관리를 담당하는 역할@EnableJpaAuditing : JPA 엔티티에 대한 감시 설정을 활성화 한다. 엔티티의 생성일자, 수정일
@RequestBody : 이 어노테이션은 HTTP 요청의 본문(body) 데이터를 Java 객체로 매핑할 때 사용된다. 주로 POST나 PUT 요청과 함께 JSON 또는 XML 형태의 데이터를 받을 때 사용된다. 예를 들어, 컨트롤러 메소드의 매개변수에 @Reques
이 함수는 Stream의 요소들을 하나의 데이터로 만드는 작업을 수행한다. Stream numbers = Stream.of(1,2,3,4,5,6,7,8,9,10); Optional sum = numbers.reduce((x,y)->x+y); sum.ifPresent
비밀번호 변경이력 3회 안으로 같은 비밀번호를 입력했을때 변경 실패를 하는 테스트 중 일단 4번의 비밀번호 변경이 다 다른 경우 비밀번호 변경 성공하는 단위 테스트이다. userRepository = mock(UserRepository.class);: Mockito
복습을 위해 다시 프로그램을 실행시켰으나, 다음과 같은 오류가 발생하였다.ERROR 10704 --- main o.s.b.d.LoggingFailureAnalysisReporter :APPLICATION FAILED TO STARTDescript
알고리즘 43번 크기가 작은 부분문자열 문제 설명 숫자로 이루어진 문자열 t와 p가 주어질 때, t에서 p와 길이가 같은 부분문자열 중에서, 이 부분문자열이 나타내는 수가 p가 나타내는 수보다 작거나 같은 것이 나오는 횟수를 return하는 함수 solution을
FetchType과 fetch 옵션은 JPA(Java Persistence API)에서 엔티티 간 관계를 정의하고 로딩하는 방식을 제어하는 데 사용된다. 데이터 베이스에서 데이터를 가져올 때 연관된 엔티티들을 어떻게 함께 가져올지 결정하는데 영향을 미친다.FetchTy
Cascade JPA에서 엔티티 간의 연관 관계에서 부모 엔티티의 상태 변경이 자식 엔티티에 영향을 주는 방식을 정의하는데 사용된다. CascadeType은 이러한 영향의 종류를 지정하는데, 주로 부모 엔티티의 변경이 자식 엔티티에 어떤 영향을 미칠지를 설
@Configuration 이 어노테이션을 붙인 클래스는 스프링 Bean 구성 클래스로 인식한다. 이 어노테이션이 설정된 클래스는 애플리케이션의 구성 요소들을 정의하고 구성하기 위해 사용한다 Bean 정의: @Bean 어노테이션과 함께 메서드를 정의하여 스프링 애플리
HTTP 응답을 표현하는 클래스로, HTTP 상태 코드, 헤더, 바디 등을 포함할 수 있다.ResponseEntity를 생성하여 HTTP 상태 코드 200(OK)를 반환한다.예시: ResponseEntity.ok().body("Success");지정된 HTTP 상태 코
JwtUtil 클래스 JwtAuthorizationFilter 클래스 Spring Security에서 JWT 토큰을 이용한 인증을 처리하는 필터의 일부이다. getCustomerClaim(String token) : 이 메소드는 주어진 JWT 토큰에서
SecurityContextHolder.getContext().getAuthentication().getPrincipal() : 인증된 사용자의 정보를 가져오는 메소드 이 메소드가 반환하는 Principal 객체는 UserDetails 인터페이스를 구현한 객체이다. U
해당 엔티티를 조회할 때 트랜잭션이 필수는 아니지만, 지연로딩된 엔티티를 실제로 사용할 때는 트랜잭션이 적용되어 있어야 한다.영속성 컨텍스트 기능 중 하나이다.JPA 에서 N+1문제OneToMany상황에서 지연로딩 - 엔티티를 조회할시 사용할 때까지 데이터 로딩을 미루
@RestControllerAdvice 어노테이션컨트롤러에서 발생하는 예외를 한 곳에서 관리하고 처리한다.sendFail(): SendFailedException이 발생하면 이 메서드가 호출된다. 메서드는 HTTP 상태 코드 500(Internal Server Err
@EntityGraph 어노테이션 -@EntityGraph는 JPA가 제공하는 기능이다. 엔티티를 조회할 때 연관된 엔티티들을 어떻게 가져올지 정의할 수 있다. attributePaths는 로딩 할 연관 속성의 경로를 지정하는데 여기서는 "user"라는 연관 속성을
@MappedSuperclass: JPA의 어노테이션 - 이 클래스를 상속받는 엔티티 클래스에서 이 클래스의 필드들도 컬럼으로 인식하게끔 한다. 객체의 입장에서 공통 매핑 정보가 필요할 때 사용한다. @EntityListeners(AuditingEntityListe
List getAllColumns(): 이 메서드는 데이터베이스에 있는 모든 'Column' 데이터를 조회하고, 그 결과를 List 형태로 반환하는 역할을 한다. 데이터베이스에서 'Column' 테이블의 모든 레코드를 가져와서 Java 객체로 변환 후, 이를 List에
Toy Trello - 팀원들과 일정을 같이 세우고 조율하는 Trello , 작업의 흐름을 시각적으로 파악하게 합니다.주어진 필수 구현 기능들을 최대한 완성도 있게 구현해내자Keep적극적으로 임하는 자세다른 코드를 보며 자신의 코드에 적극적으로 도입하고 배운 점각자 스
스프링 5.0부터는 Netty 서버를 통해 비동기 처리를 지원하게 되었다. 이는 서버의 성능을 크게 향상시키는 중요한 변화이다.이전의 서블릿 기반 스프링에서는 클라이언트의 요청이 동시에 들어올 때, 각 요청은 별도의 스레드에서 처리되었다. 이로 인해 시스템 부하를 증가
프로세스는 운영체제에서 관리하는 작업의 단위로, 연산 작업들이 연속적으로 이어져 내려온다는 것을 의미한다. 이 연속적인 흐름은 프로세스 수준에서는 하나만 존재하며, 외부 요인에 따라 그 흐름이 바뀔 수 있다.스레드는 프로세스 내에서 실행되는 여러 흐름의 단위로, 프로세
결합도는 낮추고 응집도를 높여야 한다.결합도 : 클래스 간에 얼마나 많이 의존하고 있는가를 나타낸다. 상호 의존도가 낮을수록 코드의 유지・보수가 유리해진다.응집도 : 얼마나 많이 단일 클래스에서 책임(기능)을 가지고 있는지 나타낸다. 단일 클래스에 하나의 책임을 가지면
🗝️요약 : Comparable 인터페이스 구현 메소드인 compareTo 에서 양수를 리턴하면 해당 클래스 객체는 뒤에 위치하게 되고 매개변수로 삽입된 클래스 객체는 앞에 위치하게 된다. 음수를 리턴하면 반대로 해당 클래스 객체는 앞에 위치하고 매개변수로 삽입된 클
GCD(Greatest Common Divisor) 메소드호제법(互除法) : 두 수가 서로(互) 상대방 수를 나누어(除)서 결국 원하는 수를 얻는 알고리즘a를 b로 나눈 나머지를 r이라 가정 (r = a % b)만약 r이 0이라면, b가 a와 b의 최대공약수이다. (G
파일 시스템의 데이터를 변경하는 건 느리다! 영속성, 일관성에 초점을 맞춘 데이터 베이스 - HDD, SSD에 저장됨(H2 제외 - 인메모리) >각 단계에서의 속도를 인간의 시간으로 놓았을 때 SSD 와 InMemory 속도는 하루 이상이 차이난다. 레디스는 자주
그냥 http로 보내면 평문으로 전송이된다. HTTP는 뒤죽박죽이 된 암호화된 문장이 전송된다.기관으로 부터 검증된 사이트만 주소에 HTTPS 사용이 허가되므로 접속한 사이트가 믿을 만한 곳인지 알려준다.메시지를 보내는 쪽과 받는 쪽이 같은 키를 가지고 HTTPS 암호
객체-관계 매핑(ORM)을 수행하기 위한 표준 명세 자바 객체와 DB 테이블과 매핑데이터 베이스 연산을 객체 지향적으로 수행하게 해준다. 여러 작업을 하나의 단위로 처리하여 모든 작업이 성공해야 데이터가 DB에 반영이 된다.데이터의 일관성 유지, 시스템의 신뢰성 향상전
장점 및 특징개발 ,배포, 유지보수 용이해짐확장성🔝, 유연성 🔝, 개발주기⬇️주로 HTTP, HTTPS, 메시지 큐 로 통신함독립적 배포기술 스택의 다양성 ( spring framework , Django, NodeJS.. 와의 결합)단점서비스 간 통신 기능을 따로
FeignClient를 지연 로딩(Lazy Load)할 때 발생할 수 있는 HttpMessageConverters 관련 문제를 해결하기 위한 설정이다. FeignClient를 사용하여 다른 서비스와의 통신을 진행할때 HttpMessageConverters는 직렬화 역직
unknown (알려지지 않음) - 생일unavailable or withheld (공개 하지 않음) - 민감한 정보not applicable (해당 사항 없음) - 집전화 없는 경우\-> 생일 열(row)이 null로 되어 있을때 어떤 두사람을 같다(==), 다르다(
INNER JOIN은 두 테이블 간의 공통된 값들을 보여준다. inner를 생략하고 join만 입력해도 된다.두 테이블을 합친 결과가 출력되었다.특징 : join condition에 여러 비교 연산자를 사용할 수 있다. =,<,>,!= ...null값은 결합된 테
\-> String data = "ABC"를 할 경우data += "DEF"를 한다면 "ABC"와 "ABCDEF" 두가지의 메모리 영역이 생긴다.data는 메모리 스택 영역에 저장되고 "ABC", "ABCDEF"는 메모리 힙 영역에 저장된다.\-공통점버퍼에 문자열을 저
Refresh Token : 인증 시스템에서 중요한 역할, 보안 토큰. OAUTH와 JWT(JSON WEB TOKEN) 기반 인증 시스템에서 사용된다.토큰은 세션방식과 달리 stateless 하다. ( 서버가 상태를 보관하지 않는다. )토큰 방식에서는 서버는 한번 발급
대량의 데이터를 효율적으로 처리하기 위함이다. List로 가져올 경우 성능에 부정적 영향을 끼친다. 일정한 크기로 잘라서 가져옴으로써 성능을 향상시킨다.네트워크 트래픽 절약 일정한 크기로 가져옴으로써 트래픽을 절약한다.사용자 경험 개선 : 빠른 로딩, 탐색 용이Spri
Eureka 서버 설정 dependencyapplicaiton.yml@EnableEurekaServer 추가프로젝트 루트 폴더에서 실행 dockerfile 설정docker-compose.yml 설정networks: \- msa-network 네트워크
Redis를 사용하는 이유메모리 기반 데이터 저장소이므로, 좌석선점과 같은 짧은 시간동안 유지하는 데이터를 빠르게 저장 조회가 가능하다. 응답속도를 높일 수 있다.동시성 제어좌석이 중복으로 예매되지 않도록 동시성 처리를 한다. 분산 락과 비관적 락을 Redis를 통해
MSA 환경에서 여러 플랫폼(안드로이드, IOS, 웹 ...)을 지원하기 위해 각각의 특정 데이터가 필요한 상황이 발생되고 원하는 데이터 형태를 만들어내기 위해 여러 API를 호출하고 혼합하는 과정이 생길 수 있고 이런 상황들 때문에 프론트엔드에서 복잡한 계산 혹은 비