자식은 부모클래스의 메서드를 기본으로 갖게됨.오버라이드를 통해 상속받은 메서드를 덮어 쓸 수 있다.
상속만으로 문제를 해결하려 하면 복잡한 상속구조를 가지게 되는 것이 부지기수.이러한 문제를 피하기 위해 구성을 활용한다.위와 같은 상속 구조를 가질 때 하늘을 날면서 그냥 떠다니는 로켓오리를 추가하고 싶다고 하자.그럼 로켓오리는 오리 추상클래스를 바로 상속받아야 할까
위 코드에서 총 생성되는 String의 개수를 알아보자.자바에서 스트링은 String Pool 이라고 불리는 공간에 실제 불변 문자열들이 저장돼있고 String 변수가 이를 참조하는 형태이다.따라서 str이라는 문자열 변수에 변형이 일어나도 실제 "a"가 변하는 것이
자바의 라이브러리 중에는 미리 만들어진 자료구조를 사용할 수 있는 Collections 라이브러리가 있다.웬만한 자료구조들은 거의 다 들어있다.(배열, 큐, 스택, 해쉬셋, 트리셋, 해쉬맵, 트리맵, 동시성해쉬맵, ....)java.util.Collections 패키지
백엔드 스쿨에서 현직자 분을 초청해서 특강해주셨다.카카오뱅크 분이셨고 핀테크 쪽의 백엔드를 주제로 설명해주셨다.핀테크 백엔드 개발자는 주로 3분야 중 한 곳에서 일하게 된다고 한다.여신: 대출, 주택담보대출수신: 입출금 통장, 모임통장이체: 계좌이체개발현장에서 실제로
직접 입력하고 출력된 결과를 눈으로 확인하는 것보다 훨씬 빠르고 효율적이다.
서버: 응답하는 컴퓨터브라우저: 서버의 응답은 클라이언트에게 렌더링하여 보여주거나, 서버에 요청을 보내는 프로그램
데이터베이스는 테이블들을 모아놓은 것MySql은 데이터베이스가 아닌 DBMS이다.데이터베이스를 정의할 때 사용CREATE, DROP, ALTER 등데이터베이스를 조작할 때 사용SELECT, INSERT, UPDATE, DELETE 등CreateReadUpdateDele
MAX: 최댓값 반환MIN: 최솟값 반환AVG: 평균값 반환COUNT: 행의 수 반환GROUP_CONCAT: 값을 concat(이어붙이기)함group by 가 있다 -> 그룹별로 나눠진 상태에서 그룹함수 실행group by 가 없다 -> 전체 테이블에 대해 그룹함수 실
count는 null값을 세지 않는다.빠른 검색을 위한 추가 데이터장점: 검색속도 향상단점: 추가, 수정, 삭제 시 추가작업시스템이 느려질 때 색인을 거는 것이 좋다.중복허용이 안된다. 보통 이런 경우 이메일, 아이디 같은 거인 경우가 많다.이메일, 아이디로 회원을 검
요소를 display:flex;로 설정하면 flex 컨테이너가 되고 내부 요소는 flex 아이템이 된다.justify-content: 요소들의 수평 관계 설정algin-items: 요소들의 수직 관계 설정이 외에 더 많은 속성들을 설정할 수 있다.기본적으로 요소의 po
웹 개발을 위한 프레임 워크틀에 맞춰 코드를 짜기만 하면 된다.요청을 받아서 처리하는 객체간단하게 @Controller 애노테이션을 클래스에 붙이는 것만으로도 스프링에 등록할 수 있다.url의 ?뒤에 붙는 파라미터들이다.컨트롤러의 메서드 인자로서 참조가능하다.인수 앞의
스프링은 컴포넌트들을 IoC컨테이너에 저장해 두고 필요할 때 꺼내쓴다.사용할 때마다 new로 객체생성 안한다.필드에 직접 컨테이너의 요소를 주입한다.HttpServletRequest,HttpServletResponse 객체를 이용하여 요청과 응답에 대한 설정을 직접
둘은 생명주기가 다르다memberService: 앱 시작 시 탄생, 앱 종료시 사라짐Rq: 요청시작 시 탄생, 요청 종료 시 사라짐@RequestScope 객체를 요청마다 생성하게 하는 애노테이션MemberController의 멤버변수 rq는 요청을 받기 전까진 프록시
스프링부트에 DB 연결 application.yml파일에 다음과 같이 작성한다. 드라이버 애플리케이션에서 DB를 다루기 위한 프로그램 DB종류마다 다양하다. JPA를 사용하는 경우 >SpingDataJPA -> Hibernate(JPA 구현체) -> DB드라
테스트코드의 메서드에 이 애노테이션을 붙이면 메서드가 끝날 때까지 DB세션이 유지된다.엔티티는 DB와 직접적으로 맞닿기 때문에 엔티티를 모델의 데이터로 사용하는 것은 위험하다. DTO는 전송될 데이터만을 담은 클래스로 직접 엔티티를 넘기는 것보다 안전하다.엔티티와 DT
테스트환경에서는 리포지토리를 이용한 통신만 가능하다.@Transactional은 메서드가 종료될 때까지 DB와의 접속을 유지한다.하이버네이트의 FetchType에는 EAGER(즉시)와 LAZY(지연)이 있다.EAGER: 객체를 DB로부터 조회할 때 연관 객체를 조인해서
연관관계에 있는 두 엔티티에 toString을 정의하면 잘못하면 순환 참조가 일어날 수 있다.Question엔티티와 Answer엔티티가 일대다 관계를 갖고 두 엔티티의 toString내부에서 상대 객체를 참조할 때 Question에서 Answer를 참조 -> Answe
크롤링 네이버에서 특정 요소를 리스트로 뽑아오는 예제 bash ~ : 홈 디렉토리 cd ~ : 사용자 폴더로 이동 ls : 현재 디렉토리의 모든 파일을 출력 clear : 콘솔 화면을 지움 start . : 파일탐색기 열림(Mac에서는 open .) ll : ls
fgrep fgrep : 출력에서 특정 패턴을 포함하는 라인만 걸러내기 파일 이동 mv : 파일을 이동, 이동과 동시에 바꿀 수도 있음 파일 복사 cp : 파일을 복사, 디렉토리를 복사할 땐 -r 인수 필요 N+1 문제 >일대다 연관관계에서 하나를 조회하는데 연관된
텍스트를 이스케이프하지 않고 그대로 노출XSS 공격의 위험이 있으므로 이를 방지하는 라이브러리를 이용해야한다.부트스트랩은 12그리드를 사용한다.col-6 : 너비의 6/12를 사용하겠다row : col을 사용하려면 행이 먼저 지정돼야한다.
oauth 프레임워크 의존성을 추가만 해줘도 oauth에대한 요청이 처리 가능함implementation 'org.springframework.boot:spring-boot-starter-oauth2-client' // 카카오 로그인, 구글 로그인, 네이버 로그인이제
가상머신의 특정 상태를 스냅샷으로 저장할 수 있다.가상머신을 우클릭하고 Snapshots를 클릭가상머신을 또 우클릭하고 스냅샷 이름 지정후 take위와 같이 스냅샷이 생성명령어 ip addr 입력후 로컬이 아닌 랜카드의 ip주소를 호스트에서 ssh로 연결호스트에서 ss
랜카드 == NIC == 네트워크 인터페이스컴퓨터 안에 랜카드는 여러개 있을 수 있음Nat: 공인 IP를 가상머신이 공유함, 호스트는 가상머신의 내부 IP를 알 수가 없으므로 원격접속이 안된다.호스트전용: 호스트에서 가상머신 전용 가상 랜카드가 생성되는 방식, 가상머신
데몬프로세스 : 백그라운드에서 계속 실행하는 프로세스, systemctl명령어로 조작 가능start : 프로세스 시작stop : 프로세스 종료restart : 프로세스 재시작enable : 부팅시 자동 시작 설정disable : enable 해제설치&시작yum inst
도커 이미지들을 다운받을 수 있는 곳이미지 이름은 이미지 제작자/이미지 이름 으로 구성된다. 앞의 접두어가 없으면 공인 이미지이다.docker images: 이미지 목록docker ps : 실행중인 것, -a로 실행 종료된 것도 표시docker rm : 컨테이너id =
도커외부에서 도커에 접속해보기docker exec -it nginx_1 bash로 도커쉘 획득apt-get update, apt-get install iproute2, ip addr로 도커의 ip 주소 획득도커외부에서 curl 도커IP주소 실행nginx 이미지의 컨테이
input 태그의 타입을 radio로 하면 체크박스를 만들 수 있음같은 이름을 가진 라디오 중에서는 하나만 체크 가능함태그에 checked 속성이 있으면 기본적으로 선택된 상태결과브라우저에서 봤을 때 모습맥에서 /private/etc/hosts 파일을 열고 다음 내용을
onkeyup : 키를 눌렀다가 떼는 순간 발생onchange : 내용 입력 후 포커스 해제한 순간onpaste : 붙여넣기 한 순간노드js 도커파일WORKDIR /usr/src/appCOPY ./ ./RUN npm installEXPOSE 8080CMD "node",
클라이언트에서 직접 호스트서버의 포트번호를 명시Nginx가 포트기반으로 맵핑된 폴더에서 파일 전송/etc/nginx/conf.d/vhost.conf 작성각 포트마다 사이트가 맵핑되었다.도메인 주소를 보고 폴더를 맵핑/etc/nginx/conf.d/vhost.conf도메
교점에 별 만들기정수교점을 구한다.출력의 가로 세로를 구한다.출력.
컬렉션을 클래스로 한번 더 감싼 것장점1\. 비즈니스 로직이 관련 도메인에 캡슐화된다.2\. 불변성이 유지된다.3\. 코드 중복이 최소화된다.4\. 테스트하기에 용이해진다.예클래스에 접근 제어자를 붙이면 테스트에서 각 메소드들을 테스트하기가 쉽지 않다.이럴땐 리플렉션으
관련된 서비스에 대해 한번에 여러 도커 명령어를 실행시키는 기능docker-compose.yml 파일이 필요하다.이후 docker compose up -d를 실행하면 직접 docker run을 한 것과 같이 실행된다.이전의 vhost 파일을 통한 맵핑정보를 nginx
옵저버 패턴을 이용하여 결합도를 낮출 수 있다.어떤 이벤트가 일어났음을 전체 시스템에 알린다.해당이벤트를 처리하는 이벤트리스너가 작동한다.스프링의 내장객체 ApplicationEvent 와 ApplicationEventPublisher가 이 기능을 제공해준다.예publ
그램그램 프로젝트 리포지토리 링크미션의 새로운 요구사항으로 수정과 삭제에 쿨타임을 두게 되었다.처음에는 괜히 어렵게 세션을 이용해서 구현해야하나 싶었는데 LikeablePerson 엔티티의 modifyDate을 와 LocalDateTime.now() 만으로 구현 가능했
프로그래머스-기능개발예시입력각 작업도의 남은 날짜를 담은 큐 remainDays를 선언남은 날 = (100.0 - progressi)/speediremainDays = \[9,3,7]과정remainDays에서 7을 뺀다3이 7보다 작으므로 두번째 작업도 배포해야한다.
대칭키: 보안성 낮음, 암호화와 복호화의 키가 같다. 속도 빠름비대칭키: 보안성 높음, 암호화와 복호화의 키가 다르다. 속도 느림공개키로 암호화한 것은 개인키로 풀 수 있다.개인키로 암호화한 것은 공개키로 풀 수 있다.https: http + ssl암호화, 복
요청헤더의 languages 속성에 따라 서비스의 언어를 다르게 표시해줄 수 있다.빈 파일로 작성렌더링된 html은 요청헤더의 언어 우선순위에 따라 다르게 표현된다.
PG : 여러 카드사의 서비스를 아우르는 서비스, 각 카드사의 api를 하나하나 따올 필요가 없게 해준다.토스페이먼츠는 이러한 PG 중 하나다.예시이렇게 자바스크립트로 결제정보를 넘기게 된다.위험하진 않나? => 토스페이먼츠에서 다시한번 백엔드 서비스에 검증을 요청하기
알고리즘 양과 늑대 접근 > - DFS로 풀 수 있겠다고 생각 > - 어떤 노드에 방문하면 다음에 방문할 수 있는 노드에 현재 노드의 자식들을 추가 > - 양의 수와 늑대의 수가 같아지면 해당 노드의 방문 취소 반성 이진 트리라는 것에 사고가 얽매여서 preOrd
양과 늑대기존의 양과 늑대코드를 조금 리팩토링하였다.jstl을 사용하려면 jstl 구현체와 api를 톰캣설치 파일에 넣어줘야한다.톰캣설치파일/libs프로젝트 의존성에 추가하는 것이 아님에 주의rest api에선 세션을 갖지 않는다. 앞으로 인증은 클라이언트에게 JWT를
http 에는 100번대부터 500번대까지의 상태코드가 있지만,이것만으로는 서버의 구체적인 상황을 이용자들에게 전달해주기 어렵다.권장되는 응답 형식의 예api 의 규격을 바꾸는 상황이면 기존 api를 변경하는 것이 아닌 새로운 버전의 api를 만드는 것이 좋다./api
서버들이 사설 네트워크로 연결 돼있어야 한다.서버들이 nas를 통해 공유 저장공간을 가져야 한다.kubeadm: 클러스터를 부트스트랩kublet: 클러스터의 모든 머신에서 실행되는 파드, 컨테이너 시작같은 작업을 수행하는 컴포넌트kubectl: 클러스터와 통신하기 위한
프로젝트의 배포를 위해 네이버 클라우드 플랫폼을 사용하게 되었다.그램그램위의 사이트는 현재 네이버 클라우드 플랫폼에서 돌아가고 있는 중이다.현재 CI/CD까지 적용된 상태이다. 개발을 하면서 기능 별 단위 테스트는 기본적으로 하였다. 그리고 요청별 응답도 제대로 나오는
su - jenkins해봤자 바로 터미널 세션이 꺼져버린다.우분투 18 기준 아래 명령어로 젠킨스사용자로 터미널에 접속다시 빌드 파이프라인을 실행하면 제대로 돌아감
짧게는 DDB. NoSQL임. 데이터를 json처럼 저장함. 스키마가 없음. MySql이랑 비교해보면파티션 키만 있을 때가 있고 정렬키가 같이 있을 수도 있음.파티션키만 있을 때: 파티션키가 항목을 유일 식별정렬키도 있을 때: 파티션+정렬 키 조합이 항목을 유일 식별쉽