레퍼런스 변수(references variables) 변수에 주솟값을 저장한다. 값을 가리킨다. 기본 변수(privitives variables) 변수에 실제 값을 직접 저장한다. static: "공유"의 개념이 담긴 키워드 static fiel
OOP 장점 관리 재사용 확장 추상클래스와 인터페이스의 차이와 존재 이유가 뭘까 추상클래스 정의 추상메서드가 하나 이상 포함되거나 abstract로 정의된 경우 > 추상 메서드는 내부가 아직 구현되지 않은 abstract로 정의된 메서드를 말한다. -> 아직 구체적으로 표현되지 않은 메서드 형태 "일반...
객체, 설계 객체지향 설계의 핵심은 적절한 객체에 적절한 책임을 할당하는 것이다. 객체는 다른 객체와의 협락이라는 문맥 안에서 특정한 역할을 수행하는 데 필요한 적절한 책임을 수행해야 한다. 따라서 객체가 어떤 데이터를 가지느냐보다는 객체에 어떤 책임을
객체의 내부 상태는 외부에서 접근하지 못하도록 감춰야 한다. 대신 외부에 공개하는 퍼블릭 인터페이스를 통해 내부 상태에 접근할 수 있도록 허용한다. 객체는 다른 객체의 인터페이스에 공개된 행동을 수행하도록 요청할 수 있다. 요청을 받은 객체는 자율적인 방법에 따라 요청을 처리한 후 응답한다. 객체가 다른 객체와 사용호작용할 수 있는 유일한 방...
@ResponseBody HTTP의 body에 문자 내용을 직접 반환 viewResolver 대신에 HttpMessageConverter가 동작 기본 문자처리: StringHttpMessageConverter 기본 객체처리: MappingJackson2HttpMessageConverter Jackson -> 객체를 json으로...
스프링 핵심 컨셉이 뭘까? 스프링은 자바 언어 기반의 프레임워크이고 기반 언어인 자바는 객체지향이라는 특징을 가진다. 즉 스프링은 자바 언어를 이용해서 객체지향적으로 개발할 수 있게 틀을 제공해주는 도구다. 객체 지향 프로그래밍 객체들의 모임 메시지를 주고받는다. 협력 유연하고 변경이 용이 다형성 역할과 구현으로 분리 클라이언트는 인터페이스...
프레임워크와 라이브러리 프레임워크 내가 작성한 코드를 제어하고, 대신 실행하면 프레임워크다. 라이브러리 내가 작성한 코드가 직접 제어의 흐름을 담당한다면 그것은 라이브러리다. IOC Inversion Of Control 제어의 역전 -> 제어가 뒤바뀜 DI를 실행하면 IOC가 된다. IOC는 개념이기 때문에 DI 행위를 통해서 IOC 개념이...
Response Body > API 개발시 어떠한 처리 결과에도 동일한 포맷의 응답을 리턴하는 것은 중요하다. 상황에 따라 응답 데이터의 형식이 달라지면 해당 응답을 전달받는 주로 프론트 개발자가 사용하기 어려운 데이터가 될 수 있음 따라서 성공했을 때 그리고 실패했을 때 어떤 상황이든 응답형식을 항상 조작하기 쉽도록 json으로 일관성 있게 내려주는 게...
김영한님의 자바 ORM 표준 JPA 프로그래밍 강의를 수강하면서 정리했습니다. > - 처음 ~ 엔티티 매핑 SQL 중심 개발의 문제점 패러다임의 불일치 객체 VS 관계형 데이터베이스 객체 -> SQL 변환 -> SQL -> RDB 진정한 의미의 계층 분할이 어렵다. 객체답게 모델링 할수록 매핑 작업만 늘어난다. 객체를 자바 컬렉션에 저장하듯이 DB...
김영한님의 자바 ORM 표준 JPA 프로그래밍 강의를 수강하면서 정리했습니다. > - 연관관계 매핑 기초 데이터 중심 설계의 문제점 객체 설계를 테이블 설계에 맞춘 방식 테이블의 외래키를 객체에 그대로 가져옴 객체 그래프 탐색이 불가능 연관관계 매핑 기초 객체와 테이블 연관관계의 차이를 이해해야한다. 객체의 참조와 테이블의 외래키를 매핑해야한다. 용어...
개념 정리 공부하면서 중요하다고 생각한 개념을 정리했습니다. REST가 뭘까 HTTP를 잘 사용하기 위한 아키텍처 스타일 REST는 URI와 HTTP 메소드를 사용해서 자원과 행위를 표현합니다. REST의 원칙을 지키면서 API의 의미를 표현하기 쉽고, 파악하기 쉽게 하는 것을 Restful 하다고 한다. API Application Programmin...
CI/CD ec2에 스프링부트 프로젝트를 배포한 적이 있었는데 매우 번거로웠다. 특히 소스가 변경될 때마다 매번 똑같은 배포 과정을 수동으로 직접 진행해야 한다. 위 과정을 git 에 push만 하면 자동으로 배포되게 만들어볼 목적으로 우선 CI/CD를 공부한다. CI Continuous Integration 지속적인 통합 prepare release ...
CORS Cross-Origin Resource Sharing Policy 교차 출처 리소스 공유 추가 HTTP 헤더를 사용해 한 출처에서 실행 중인 웹 어플리케이션이 다른 출처의 선택한 자원에 접근할 수 있는 권한을 부여하도록 브라우저에 알려주는 체제 웹 어플리케이션은 리소스가 자신의 출처( domain, protocol, port )와 다를 때 교차 출...
Client - Sever 통신 일반적으로 소프트웨어에서 사용하는 데이터들은 보통 서버에서 관리된다. 그럼 클라이언트에서 이 서버에서 접속하여 테이터를 주고받게 되는데, 여기서 통신 방식이 크게 Http 통신과 Socket 통신 2가지 방식이 있다. HTTP 통신 > 클라이언트의 요청이 있을 때만** 서버가 응답하여 해당 정보를 전송하고 곧바로 연결하는...
객체 생성 제약 객체의 직접 생성을 외부에서 못하게 설정 @builder 어노테이션이 설정돼 있는 생성자 메서드를 통해 객체를 생성한다. 빌더 패턴을 이용한 객체 생성 강요의 장점 객체를 생성할 때 인자 값의 순서가 상관없음 여러 생성자를 두지 않고 하나의 생성자를 통해 객체 생성이 가능함 DTO 클래스의 필요 이유 데이터 안정성 엔티티 클래스로 R...
즉시 로딩 엔티티를 조회할 때 해당 엔티티와 매핑된 엔티티도 한번에 조회하는 것 @OneToOne , @ManyToOne 으로 매핑하는 경우 기본 Fetch 전략이 즉시로딩이다. 일대일 단방향 매핑 회원 - 장바구니 다대일 단방향 매핑 장바구니 - 장바구니 상품 - 상품 주문* - 회원1 다대일/일대다 양방향 매핑 주문1 - 주문 상품* 양...
처음에는 위 사진처럼 댓글에 대댓글이 달리고 그 대댓글에 다시 댓글이 달리면 박스가 오른쪽으로 계속 밀리는 형태의 댓글을 구현해보려고 생각했다. 이걸 무한 댓글이라고 부르는 것같다. 그런데 찾아보니까 그런 형식으로는 요즘 보기에도 복잡하고 사용성이 떨어져서 잘 안쓰인다고 한다. 그래서 계획을 바꿨고 유투브와 인스타그램의 댓글 방식을 참고했다. 유투브와 ...
테스트코드 테스트코드 작성 이유? 문서화 역할 코드에 결함을 발견하기 위함 리팩토링 시, (심리적) 안정성 확보 테스트하기 쉬운 코드를 작성하다 보면 더 낮은 결합도를 가진 설계를 얻을 수 있음 TDD Test Deriven Development 테스트 주도 개발 프로덕션 코드보다 테스트코드를 먼저 작성하는 개발 방법 TFD(Test First D...
객체지향 객체지향 4가지 특징 추상화 다형성 캡슐화 상속 객체지향 패러다임 적절한 객체에게 적절한 책임을 할당하여 서로 메시지를 주고 받으며 협력하도록 하는 것 클래스가 아닌 객체에 초점을 맞추는 것 객체들에게 얼마나 적절한 역할과 책임을 할당하는지 high cohesion, loose coupling 높은 응집도, 낮은 결합도 객체지향 설계 및 구현...
WHAT 하려는 것 의미 의도 HOW what의 실제 구현 | what | how | | --- | ---| | 가입한 지 1년 미만 | user 테이블에서 reg 칼럼 값 기준으로 count | | 추가 지급 내역 남김 | log 테이블에 insert | 코드를 what 으로 표현해보기 구현은 그 다음에 고민 WHAT 과 HOW 분리 결과 구현을...
Dockerfile 을 build 해서 docker image 파일을 생성한다. docker image 파일을 dockerhub에 push 한다. 서버에서 dockerhub에 존재하는 docker image 파일을 pull로 받아온다. docker run 명령어를 통해 docker image 파일을 실행한다. > 스프링부트 애플리케이션을 도커 이미지로...
ubuntu 20.04 키패어 생성빈 컴퓨터, 인프라 제공로컬에서 IP주소를 이용해 원격 접속을 함 \- IP주소:22그런데 ec2 서버는 방화벽으로 모든 포트를 차단하고 있음 \- 원격 접속을 하기 위해서, 인바운드 규칙에서 22번 포트를 개방해야 함 \- 2
리눅스 명령어(shell)사용자-OS 간 대화하기 위해서 필요한 언어설치? 프로그램을 하드디스크에 복사시작 프로그램 등록카톡-통신-방화벽(방화벽 오픈)\--------> 프로그램을 다운로드만 한다고 끝이 아니다.> 우분투 리포지토리 접근 \- /etc/apt/sour
연산 장치1개? 일하는 일꾼 1명이라는 의미 그 한 명이 프로세스1개를 관리하면 다른 프로세스를 실행시킬 수 없음다중 프로세스를 위해 쓰레드를 활용함컨텍스트 스위칭(context switching 문맥 교환) \- 흐름 파악 \- 타임 슬라이싱, sleep
로컬 컴퓨터에서 개발한 프로젝트를 github에 업로드하고, github에 업로드된 프로젝트를 운영 컴퓨터로 집어 넣자단계 별로 문제점과 흐름을 파악하면서 기본적인 배포부터 해보자분(0-59)시간(0-23)일(1-31)월(1-12)요일(0-7)리눅스에서 프로세스를 실행
목표 \- 스크립트 작성으로 배포,재배포 자동화하기 공인 IP사설 IP유동 IP \- 서버 운영 불가능!남는 IP를 부여해준다. 다른 IP로 변경해서 부여해준다.var.sh.bashrc 어디에서나 사용 가능터미널 만들고 source 적용 \- 터미널이 꺼지기 직전까
인증, 인가를 기반으로 한 스프링 하위 프레임워크인증(Authentication) 은 간단히 말하면 로그인인가(Authorization) 는 간단히 말하면 내가 유저인데 어드민 권한으로 다른 사람의 계정 정보를 보거나 유저를 삭제할 수 없듯, 권한을 의미한다.Open
OS 설치가 필요없음(이미 설치가 되어있음)JDK 설치가 필요없음(이미 설치가 되어있음)오토스케일링, 각종 소트프웨어 구성, 로드밸런서, 모니터링, 업데이터 버전 관리create with java \- EC2 내부에 JDK 설치(실행서버)-5000포트 \- EC2
엘라스틴빈스톡 + RDS(데이터베이스) 연동엘라스틱빈스톡 생성 \- aws-v4-beanstalk구성 설정 \- 소프트웨어설정 - 환경 속성 - 프로젝트(웹서버) \- 해당 속성은 환경변수로서 애플리케이션에 전달 \- 키패어 등록아래 사진의 key 값과 코드
엘라스틱빈스톡 + Gihub Action(자동 배포 도구) + NLB(고정IP설정) \- EC2 서버 2개 \- 로드밸런서 \- 무중단배포지속적 통합도구 \- travis, jenkins, github actions Polling 기법 혹은 Webhooks 방법
leetcode를 풀면서 사용한 hash 관련 메서드 위주로 정리함key 와 value의 조합일반적으로 해시는 Key값을 Hash Function을 통해, HashCode를 내뱉고, 저장 공간의 Size로 나눠 Index를 정하여 Value값을 저장한다.player 값
가비아는 한국에서 가장 많이 사용되는 도메인 서미스 중 하나이다. 가비아에서 도메인 구입함 \- your-news.siteDomain Name System DNS를 운영하는 서버도메인 이름과 IP 주소를 양쪽으로 서로 변환해주는 역할name server lookupD
key-value 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 비관계형 DBMS Database, Cache, Message Broker 로 사용되며, 인메모리 데이터 구조를 가진 저장소다. 데이터베이스는 데이터를 물리디스크에 직접 사용하기 때문에
Jasypt is a java library which allows the developer to add basic encryption capabilities to his/her projects with minimum effort, and without the need
영속성 관리 > 김영한님의 자바 ORM 표준 JPA 프로그래밍 책으로 공부하면서 정리했습니다. 엔티티 매니저 팩토리와 엔티티 매니저 엔티티 매니저 팩토리는 여러 스레드가 동시에 접근해도 안전하므로 서로 다른 스레드 간에 공유해도 된다. 하지만 엔티티 매니저는 여러
김영한님의 자바 ORM 표준 JPA 프로그래밍 책으로 공부하면서 정리했습니다. 객체 관계 매핑 @ManyToOne 다대일 관계라는 매핑 정보 @JoinColumn(name="team_id") 조인 칼럼은 외래키를 매핑할 때 사용한다. name 속성에는 매핑할 외래
김영한님의 자바 ORM 표준 JPA 프로그래밍 책으로 공부하면서 정리했습니다. @Entity 적용 시 주의사항 기본 생성자 필수 파라미터가 없는 public 또는 protected 생성자 JPA가 엔티티 객체를 생성할 때 기본 생성자를 사용하므로 이 생성자는 반드
자료구조와 알고리즘을 함께 Java! 책을 참고해서 작성했습니다. 처음 ~ 배열 배열 같은 자료형을 메모리 상에 연속적으로 나열한 형태 배열의 변수는 참조형 변수이고, 일반적인 변수와는 다른 성격을 가진다. int num;의 변수를 선언하면 num 이라는 메모리 공
김영한님의 자바 ORM 표준 JPA 프로그래밍 책으로 공부하면서 정리했습니다. 엔티티의 연관관계를 매핑할 때 고려해야 하는 것 다중성 일대일 관계인지, 일대다 관계인지... 단방향, 양방향 양방향이라면 연관관계의 주인을 정해야한다. 다중성 다대일 일대다 일대일 다
데이터 베이스 트랜잭션과 트랜잭션의 매우 중요한 속성들인 ACID를 공부하고 정리했습니다. 단일한 논리적인 작업 단위(single logical unit of work)논리적인 이유로 여러 SQL문들을 단일 작업으로 묶어서 나눠질 수 없게 만든 것트랜잭션의 SQL문들
코드를 어떻게 작성할 지 규칙을 정하는 것을 말한다. 탭이냐 스페이스냐, 들여쓰기에서 스페이스는 2번이냐 4번이냐, 함수 뒤에 중괄호는 바로 열 것이냐 개행 후 열 것이냐 등 규칙을 정해준다.소프트웨어 개발 비용의 80%는 유지보수에 쓰인다.코딩 규칙을 지키면 다른 사
최근 3달의 기간 동안 총 6번의 팀프로젝트(5번은 각 일주일, 1번은 한 달)를 진행해왔다. 팀 프로젝트를 진행하면서 느낀 점은 모든 구성원이 인지하고 있는 정확한 규칙이 없어서 커뮤니케이션 코스트가 많이 증가한다고 느꼈다. 원할하게 협업하기 위해서는 통일된 기준이