1. 클라이언트란? 서버로 요청하는 프로그램을 모두 일컬어 부르는 말. 2. 서버란? 클라이언트의 요청을 받아 처리하는 주체. 3. 데이터베이스 데이터 저장소. 클라이언트에서 SQL 을 통해 데이터베이스 관리 시스템에 데이터를 요청하면 관리 시스템이 데이터베이스에서 데이터를 꺼내어 응답한다. MySQL, 오라클, PostgreSQL 등은 데이터베이스가 ...
일반적으로 누구나 컴퓨터와 프로그램, 프로그래머라는 용어에는 익숙합니다. 그렇지만 같은 프씨 집안인 프로세스에 대해서는 잘 알지 못하죠.
메모리에 적재된 프로세스를 CPU가 실행하는데, CPU는 사실 한번에 하나의 작업만 수행할 수 있습니다. 즉, 여러 개의 프로세스를 동시에 수행하는 것이 아니라 빠르게 번갈아가면서 처리하는 것이죠.
1. 캡슐화 객체를 껍질로 감싸 외부에서 함부로 접근하지 못하도록 하는 것 > ### 2. 추상화 캡슐화와 이어지는 것으로 객체를 껍질로 감싸고 외부에는 보이고 싶은 특징만 보이도록 하는 것 >### 3. 다형성 하나의 이름으로 여러가지 기능을 할 수 있도록
**인터페이스의 유산은 상속 포기가 불가능한 악성 채무인 것이다!!**
1. 오버라이딩이 무엇인가요? 부모 클래스로부터 상속받은 메소드를 자식 클래스에서 다시 쓰는 것. 내용만 다시 쓰는 것이라서 메소드의 형식은 그대로 가져다 써야 한다. > ### 2. 오버라이딩을 구현하려면 @Override를 꼭 적어야 하나? @Override
내가 자주 쓰는 웹/앱 : 네이버, 무신사, 원티드 등 등이 있는데 이들에서 공통적으로 발견되는 기능들을 기억하고 있으면 좋을 것 같다. - 회원가입, 로그인(구글, 네이버, 카카오 아이디로 로그인 !! ->> 중요), 로그아웃, 북마크 - 상품 검색, 상품 필터링(종류,브랜드,색, 가격 등) - 주문 정보 입력, 결제 (직접 결제기능을 구현하지 않고 결...
무조건 추상화가 되어야만 객체인가?
추상 클래스 공통 규약을 내리는 것이 목적인 추상 클래스 최소 하나 이상의 추상 메서드를 가지는 클래스 :: 추상 메서드가 아닌 미리 구현된 메서드도 가질 수 있다!! 직접 객체를 구현할 수 없다. 아직 정의되지 않은 메서드(=추상 메서드)도 존재하기 때문이다. 추상메서드가 구현이 되어야 인스턴스를 만들 수 있으니까. 다중 상속이 불가능하다. 동일한...
컴파일 내 코드를 기계가 이해할 수 있는 기계어로 바꾸는 과정. > ### 빌드 컴파일을 포함해서 코드와 라이브러리 등 프로그램 실행에 필요한 여러 리소스들을 종합하여 실행 직전의 상태가지 만드는 것. > ### 런타임 프로그램 실행 도중 > ### 링킹?
Dependency Injection :: 의존성 주입 Dependency(의존관계)란, 의존대상 B의 변화에 따라 의존하고 있는 A 또한 그 상태가 변하는 관계를 말한다. 객체를 만들 때, 어떤 객체가 다른 객체를 사용해야 하는 상황을 상상해보자. 이 때 객체를 만드는 책임이 해당 객체에 있으면 그 객체는 다른 객체에 의존하게 된다. 의존대상이 되는...
SQL 중심 설계란? 일반적으로 데이터를 관계형 데이터베이스를 통해 관리하므로, 데이터베이스 구조와 데이터의 흐름을 중심으로 시스템을 개발하는 것을 일컫는다. * 특징* 데이터베이스 구조와 데이터의 흐름을 중심으로 시스템을 설계 데이터베이스 설계를 중심으로 개
Entity? 데이터베이스에서 테이블과 매핑되는 객체, 도메인의 중요한 개념이나 실체를 표현한다. 데이터베이스의 테이블에 매핑되기 때문에, Entity는 데이터베이스의 행(Row)과 1:1로 매핑된다. 고유 식별자(primary Key)를 바탕으로 객체의 정체성을 부여한다. 비즈니스 로직을 포함할 수 있다. Entity를 요청이나 응답값을 전달하는 ...
Controller 👉🏻 Service 👉🏻 Repository 패턴 Controller 도메인 서비스를 호출하고 서비스와 애플리케이션 레이어 간에 데이터를 전달하는 역할, 즉 클라이언트와 도메인 사이의 중간 매개체 역할을 수행한다. 클라이언트의 요청을 해석하고 응답하는 작업을 책임진다. 즉, 를 받아서 를 반환하는 일을 하는 모든 객체가 에...
비즈니스 로직이 무엇인가? 에 대한 내 생각 : 그냥 repository에 있는 데이터를 가지고 원하는 일을 수행하는 걸 말하는 건데, 쓸데없이 있어보이려고 이름을 붙인 거 같음. 비즈니스란 군말이 붙은 이유는 수행하길 원하는 기능들이 클라이언트가 원하는(돈이 되는) 기능이라서 붙인 이름이 아닐까?
@Component :: 개발자가 생성한 Class를 Spring의 Bean으로 등록할 때 사용, Spring은 해당 Annotation을 보고 Spring의 Bean으로 등록 @ComponentScan :: @Component와 @Service, @Repository, @Controller, @Configuration이 붙은 클래스 Bean들을 찾아 ...
REST API ( Representational State Transfer )란?
1. REST API 중심 규칙 URI는 자원을 표현하는 데에 집중하고 행위에 대한 정의는 HTTP METHOD를 통해 해야 한다. 와 같이 자원에 대한 행위(HTTP 메소드)와 대상이 되는 자원을 명시하는게 좋다. 와 같이 리소스명에 동사를 쓰는 것은 바람직
도메인이 하는 역할이 명확하고, 서로 겹치는 기능이 없다면 세세하게 분리하는 것이 좋을 것이고, 그것이 아니라면 계층으로 나누는 것이 관리하기 편할 듯 하다. 서로 장단이 있지 않을까?
HTTP Method란? 클라이언트와 서버 사이에 이루어지는 요청과 응답을 수행할 때, 데이터를 전송하는 방식을 말한다.
JUnit 테스트의 구조 :: AAA 패턴 AAA는 "Arrange, Act, Assert"의 약자로, 각 단계에서 수행되는 작업을 나타냄. 먼저 테스트 상태를 설정하는 준비(arrange) 단계의 일들을 수행 테스트를 수행하기 위해 초기 상태(테스트 환경)를 설
JUnit의 명세 Annotations 특정한 역할을 가진 메타데이터를 코드에 부여하는 방식 > org.junit.jupiter.api.Test @Test 어노테이션 :: JUnit 테스트임을 명시 > org.junit.jupiter.api.BeforeEach
Hamcrest 단언문 라이브러리로서, 가독성이 좋고 표현력이 뛰어난 테스트 코드를 작성할 수 있도록 도와준다. 다만, Matcher 명을 외워서 사용해야 해서 기억이 안나면 구글링을 해야 하는 불편함이 있고 그와 반면에 assertj는 actual 타입에 따라 사용
Assertj _체이닝(Chaining) 방식으로 메서드를 계속 연결하여 사용할 수 있기 때문에, 테스트 코드를 더 가독성 있고 표현력이 뛰어난 형태로 작성할 수 있도록 도와주는 라이브러리. 특히 컬렉션과 객체 검증에 있어서 강력한 기능을 제공한다. 다양한 매처들을
1. 분기점을 고려 반복문과 조건문을 확인하기 2. 데이터 변형을 고려 데이터가 null이거나 0일 경우?
1. 어노테이션 사용 @Test 어노테이션에서 인자로 기대한 예외를 지정할 수 있다. 위 예시 코드에서 InsufficientFundsException 이 발생하면 테스트가 통과하고, 그렇지 않으면 실패한다. 2. try/catch 블록 익숙한 맛 예외가 발생하면 제어권이 catch블록으로 넘어간다. --- 3. ExpectedExcep...
Right - BICEP Right :: 결과가 올바른가? 테스트는 무엇보다 먼저 기대한 결과를 내뱉는지 검증할 수 있어야 한다. Boundary condition :: 경계 조건에서는 어떤가? 생각해야 하는 경계 조건은 다음과 같다. 모호하고 일관성없는 입력 값. 예를 들어 특문이 포함된 파일 이름 잘못된 양식의 데이터. 예를 들면 최상위 도메...
데이터를 여러 컴퓨터 그룹에 분산하여 저장하고, 그룹 내의 어떤 멤버든 업데이트할 수 있도록 하며 데이버베이스를 복제하는 기법.
_ CPU는 여러 프로세스를 Scheduleling에 맞춰서 번갈아가며 작업합니다. 그런데, 한 프로세스에서 변경한 자원을 도중에 실행된 다른 프로세스가 다룬다면 문제가 생기지 않을까요? 과연 프로세스를 실행시킬 때 원하던 값을 보장할 수 있을까요? _
제네릭(Generic) 이란 타입(T)을 매개변수로 가지는 클래스와 인터페이스를 정의할 수 있게 해주는 프로그래밍 기능. 제네릭을 사용하면 클래스나 인터페이스, 메서드를 정의할 때 타입을 파라미터로 전달할 수 있게 된다. 여기서 T는 타입 매개변수로, 실제 타입이 지정될 때까지 미정의 상태이다. Primitive 값은 지정할 수 없다. 제네릭을 사용하면...
패러다임(paradigm) 이라는 말은 '모델', '패턴', 또는 '전형적인 예'를 의미하는 파라데이그마(paradeigma)라는 그리스어에서 유래하였다.
모든 요구를 완벽히 만족시키는 구현은 없다. 결국 적절한 타협이 필요하다.
경계의 명확성이 객체의 자율성을 보장하게 하고,프로그래머에게 구현의 자유를 보장한다.
프로젝트 소개 :: https://github.com/Kernel360/E2E1-KernelEngine 가입한 유저의 블로그 게시글과 관리자가 등록한 기술 블로그의 게시글을 키워드를 통해서 검색할 수 있는 검색 서비스 > 기술 스택 Backend Java Sp
Spring Boot 3, Spring Batch 5 부터 기존에 Job을 정의하기 위해 사용하던 JobBuilder(String name) 메소드가 deprecated 되었다. 이제는 같은 이름의 JobBuilder(String name, JobRepository jobRepository) 메서드를 사용해야 한다. JobRepository 가 Batch...
아래 두 이미지와 같이 Job, Step의 Bean 을 식별하지 못하는 문제가 발생함. 같은 타입의 빈(Job, Step) 이 여러개 있는데 이 중 어떤 것을 사용해야 하는지 알 수 없어서 발생하는 문제임. 친절하게 해결책도 로그에 찍혀나온다. Job 이름 구분 못함 Step 이름 구분 못함 @Qualifer 어노테이션을 사용하여 해결함. ![Qua...
게시글 조회 시, 해당 게시글의 작성자에 대한 정보도 한 번에 가져와야 하나? 아니면 게시글을 조회한 뒤 멤버토큰으로 추가 조회를 해 와야 하나...?
./gradlew bootBuildImage 를 실행하려는 와중에 에러 발생.참고 링크에 따르면, 그래이들 버전 문제인 듯하다.관련 Github 스레드스프링 부트 버전, 의존성 매니저 버전, 그래이들 버전을 수정하여 해결하였다. gradle-wrapper.jar 를 업
Spring validation 을 활용해서 json field에 메시지를 바인딩해서 보내기하던대로 ResponseEntity 로 뤠핑해서 보내기어떻게 할까
커맨드라인 인수를 통해 애플리케이션에 설정을 주입할 수 있다JVM 시스템 속성을 통해서도 애플리케이션에 설정을 주입할 수 있다우선순위 규칙에 따라 커맨드라인 인수가 JVM 속성보다 우선하기 때문에 커맨드라인 인수로 지정된 값을 사용한다스프링 속성의 키에 대해 모든 문자
비 credential 설정 저장소로 사용할 깃 저장소 config-repo에 {어플리케이션 이름}-{프로파일}.yml 형태의 설정파일을 작성한다.이후 config-server 프로젝트를 만들고 아래와 같이 설정을 구성한다.이후 config server 를 켜고 Htt
아래 이미지와 같이 스프링 액추에이터 설정을 구성한다. Refresh 라는 특별한 엔드포인트를 노출해야 한다.이후 bootRun 등으로 어플리케이션을 실행한다.이 시점에서 요청을 보내서 설정을 확인하면 디폴트 설정 구성을 읽어오고 있는 것을 확인할 수 있다.여기서 깃
도커 네트워크를 지정해서 실행했는데 네트워크에 추가가 안되고 있었다...!
공채 과정에서 코딩테스트를 볼 때, 프로그래머스가 제공하는 플랫폼으로 시험을 치는 경우가 많습니다. IDE를 사용할 수 있으면 상관이 없지만, 사실 프로그래머스로 시험을 보면서 IDE를 사용할 수 있게 해주었던 기업은 진짜 극소수인지라...... > 자동 완성도 안되고, 정렬도 안되고, '아니 회사가면 메모장으로 개발하나? IDE 쓸거잖아' 하는 빡침을 ...