실행 환경(java)byte 코드를 실행시키기 위한 가상 머신자바 실행 환경의 약자로 자바 프로그램을 실행하기 위한 도구들이 들어있으며 JVM이 이 안에 포함된다JRE + 개발툴실행 + 개발(java + javac)javac Helloworld.javajavac는 컴파
프로그램이 거대화 하면서 이를 해결하기 위해 등장하였다.거대화된 프로그램의 동작을 객체들에게 나눠서 수행개념적인 용어 : 객체기술적인 용어 : class, instance객체는 작은 기능을 수행하며 서로 협력한다.객체는 type으로 구분한다. type은 class로 만
구현을 강제인터페이스는 모든 메서드가 추상 메서드이기에 사용시 구현을 강제한다.다형성을 제공호스트 코드(설정 파일들 드에 따라 결정을 하는 부분)에 따라서 메서드 동작이 달라진다.결합돌를 낮추는 효과(의존성을 역전 )추상체와의 결합 → 결합도가 낮아진다.의존성을 외부로
Collection 이야기 1. Collection
@EqualsAndHashCodeequals()dhk hashcode를 생성한다.@Data@Getter, @Setter, @RequiredArgsConstructor, @ToString, @EqualsAndHashCodeClass Diagram & flow chartc
모든 서비스는 데이터를 만들고 만들어진 데이터의 저장을 필요로 한다서비스 운영에 필요한 데이터를 저장하는 곳속도가 중요구조화된 테이블들의 집합으로 구성하여 저장하고 관리MySQL, PostgreSQL회사 내부에서 의상결정과 서비스 최적화를 위해 사용속도보다 큰 데이터를
오픈 소스로 무료MySQL과 인터페이스는 동이라하나 성능은 더 좋다.용량은 부족할 경우 scale-up을 사용한다.scale-up은 서버의 자원(CPU, 메모리)를 늘리는 방법이다.만약 scale-up이 더 이상 불가능하다면 정말 필요한 데이터만 저장하고 있는지 생각해
조회할 데이터 개수 지정중복된 데이터 제거하여 조회필드 이름 OR 필드의 일련 번호모든 레코드 수 카운트 = COUNT(0) = COUNT(1) = COUNT(\*)값이 존재하지 않음을 나타낸다.NULL과 함께한 연산의 결과는 항상 NULL이다.SELECT 0 + NU
정수형: DECIMAL, NUMERIC실수형: FLOAT, DOUBLE, BIT(DOUBLE이 표현할 수 있는 범위가 넓다)CHAR, VARCHAR: 크기 제한이 있다.TEXT: 정말 큰 문자열의 경우에 사용위의 두 표현 모두 동일한 표현이다. 만약 설정된 필드 순서대
Transaction 데이터베이스의 상태를 변화시키기 위해 수행되는 작업의 단위 atomic하게 실행되어야 하는 SQL들을 묶어서 하나의 작업처럼 처리하는 방법 insert/delete/update → commit X 세션 내에서는 반영된 것 처럼 보이지만 commit을 하지 않았기 때문에 실제 변경 사항이 DB에 반영되지 않는다. autocommit ...
라이브러리 다운코드 컴파일테스트 실행컴파일된 코드 packaging(jar..)artifacts(packaging된 파일)를 배포POM.xml(POM: Project Object Model)매번 같은 설정을 반복하지 않게 해준다.dependency(외부 라이브러리) 관
제어의 역전객체가 자신이 사용할 객체를 스스로 선택하지 않고 스스로 생성도 하지 않는다.프레임워크가 흐름을 주도한다.애플리케이션 코드가 프레임워크가 짜놓은 틀에서 수동적으로 동작된다.IoC가 일어나는 공간객체의 의존 관계를 설정객체들에 대한 생성과 파괴를 관장런타임 의
IoC 컨테이너(ApplicationContext)가 configuration metadata에 의해 만들어진다.Bean을 생성하며 해당 Bean에 필요한 의존성(Bean)을 제공한다.순환 참조A → B, B → A 형태로 참조가 이루어진다.A가 생성되기 위해 B가 필
Spring에서 제공하는 기능과 Spring Boot에서 제공되는 기능 구분 주의!!Spring의 ApplicationContext에서 제공하는 기능ApplicationContext → Bean 관리 Environment → Bean에게 영향을 주는 무언가Propert
Spring에서 제공하는 기능과 Spring Boot에서 제공되는 기능 구분 주의!!일련의 사건을 시간의 경과에 따라 기록하는 것Logback(Spring Boot 기본적으로 사용한다)SLF4J(Simple Logging Facade for Java)인터페이스를 제공하
Exploratoryend-to-endUI까지 포함한 테스트component서비스 전체를 테스트integration외부 서비스(DB, AWS 등)와의 연동 테스트unit가장 작은 단위의 테스트백엔드 엔지니어들이 가장 많이 접할 테스트빠르며 특정 부분을 고립시켜 테스트한
Java Database Connectivity데이터베이스 연결 + SQL 실행 인터페이스JDBC API가 DB Driver와 Connection 생성JDBC API가 DB Driver에게 Query 요청mysql-connector-java 필요try-with-reso
connection 관리 주체매번 connection 열고 닫는 많은 resource 요구한다. 이러한 문제를 해결하기 위해 커낵션을 미리 만들어 풀에 저장하는 방식이 Database Connection Pool이다. 커낵션을 저장하고 있는 풀은 Datasource가
테스트가 외부 환경(데이터베이스)에 영향을 받을 경우 테스트 자동화가 어려워진다. 이러한 문제를 해결하기 위해서 embeded database를 사용하자.h2 데이터 베이스도 있지만 현재 UUID_TO_BIN이라는 MySql 함수를 사용하고 있어 h2 대신 embede
관점 지향 프로그래밍코드 핵심부(기능)를 어수선하게 채우지 않고도 비즈니스 로직에 핵심적이지 않은 동작(부가 기능)들을 프로그램에 추가할 수 있다.여러 layer에서 공통으로 해결해야하는 문제(부가기능)AOP를 이용하여 이를 해결할 수 있다. → 핵심 기능과 부가 기능
인터넷에 연결된 컴퓨터를 통해 사람들이 정보를 공유할 수 있는 전세계적인 정보 공간Uniform Resource Identifierhttp://blog.example.com/entries/1URI SCHEME: http호스트명: blog.example.com패
Front Controller PatternDispatcherServlet = Front ControllerController에서 중복적으로 처리해야 하는 일들을 한곳(Front Controller)에서 처리한다.요청을 알맞은 컨트롤러에 위임한다.예외 처리Dispatc
applicationContext를 상속WebApplicationContext = applicationContext + servletContext에 접근 기능servletContexservlet container에서 생성여러 servlet의 공용 자원다수의 Dispat
렌더링을 브라우저에서 진행한다.화면의 일부분만을 동적으로 렌더링한다.특정 영역만 렌더링 된다.프론트와 백엔드가 분리되기 때문에 CORS를 할 수 있도록 설정 필요package.json의 proxy를 설정 → 자신의 웹서버에 요청 → 웹서버가 실제 요청Same Origi
내장 tomcat(embeded tomcat) 실행 → applicationContext 실행Auto Configuration(Spring Boot 기능) 덕분에 굉장히 편리해졌다.필요하지 않은 자동 설정의 경우 exclude할 수 있다.@Conditional을 이용하
Form 태그를 get과 post만 지원한다.데브코스를 들으며 logback.xml을 작성하여 커스텀 로거를 만들 수 있다는 것을 알게 되었다. 하지만 다음과 같은 문제 상황을 만났다.당연한 상황이다. 커스텀 로거를 설정했다면 분명히 패키지 범위(name)와 로깅 레벨
Controller, RestController에만 적용할 수 있다.@ExceptionHandler를 등록한 Controller에만 적용된다. 모든 @Controller 즉, 전역에서 발생할 수 있는 예외를 잡아 처리해주는 annotation이다.@ControllerA
필요한 모든 것을 하나하나 Bean으로 설정해야한다.필요한 것들을 알아서 Bean으로 설정해준다.In Spring Boot JDBC, the database related beans like DataSource, JdbcTemplate and NamedParameter
spring-boot-starter-data-jdbc: JDBC API, JDBC Template mybatis-spring-boot-starter: Mybatisspring-boot-starter-data-jpa: JPA참고2참고1반복적인 작업이 존재: Connec
하나만 생성된 이후 요청 마다 EntityManager를 생성한다.Thread Safe하다.Entity를 관리(CRUD)한다.Thread Safe하지 않다. 동시성 이슈가 발생할 수 있다.쓰고 버려라!내부적으로 DB connection을 얻어 DB에 접근한다.RDB의
데이터 중심 설계에는 객체 연관관계가 반영되어 있지 않다(참조를 사용하고 있지 않다). 따라서 객체 그래프 탐색을 할 수 없다.단방향 참조한쪽 객체에서만 참조양방향 참조양쪽 객체에서 서로 참조객체를 양방향 연관관계로 만들면, 연관관계의 주인을 정해야 한다.연관관계 주인
사용자의 신원을 확인하는 과정사용자의 신원과 무관한 기능들사용자의 개인정보를 확인하고, 수정할 수 있는 등 신원에 민간함 기능 등권한에 대한 내용적절한 권한이 부여된 사용자들만 특정 기능 수행 또는 데이터 접근을 허용한다.민감한 정보는 암호화를 통해서 보호해야한다.SS
Spring Security는 필터를 이용하여 웹 요청을 가로챈 후 사용자를 인증하고, 인증된 사용자가 적절한 권한을 지니고 있는지 확인한다.AuthenticationManager사용자 인증 관련 처리AccessDecisionManager사용자가 보호받는 리소스에 대한
Thread Per Request, ThreadLocal Thread Per Request WAS는 ThradPool을 생성한다 (Tomcat 기본값 200) HTTP 요청이 들어오면 Queue에 적재되고, ThreadPool 내의 특정 Thread가 Queue에서 요
자동 로그인 처리를 담당한다.Remember-me를 위해 cookie 사용한다.key(): remember-me 쿠키에 대한 고유 식별키 (미입력시 랜덤 텍스트)rememberMeParameter(): remember-me 쿠키 파라미터명(default remember
voter를 이용한 접근 권한 검사 Spring Security 인증 이벤트 ApplicationEvent 인증 성공 또는 실패가 발생했을 때 관련 이벤트(ApplicationEvent)가 발생한다. abstract class ApplicationEvent abstract class AbstractAuthenticationEvent ext...
h2 데이터베이스의 console을 사용할 수 있도록 security 필터를 거치지 않도록 설정해주어야 한다.실행되는 SQL 및 ResultSet을 로깅BeanPostProcessor 인터페이스를 구현하여, DataSource 객체를 Log4jdbcProxyDataSo
Custom UserDetailsService을 Bean으로 등록하기만해도 잘 전달된다. 두 방식의 차이는 뭘까? AuthenticationManagerBuilder를 이용하여 Custom UserDetailsService를 등록하였을까?가장 보편적이고 이해하기 쉬운
REST에 대하여 참고Session을 사용하고 있으면, Stateful 하다고 할 수 있다.앞서 살펴본 것처럼 수평확장(Scale-Out) 과정이 쉽지 않다. Session Cluster 반드시 필요하다.단일 사용자의 다중 로그인 컨트롤, 사용자 유효성 체크, 강제 로
로그인한 사용자의 정보를 가져온다.AuthenticationPrincipalArgumentResolver.resolveArgument()를 통해 Authentication(AuthenticationToken)의 principal을 가져온다.스프링 부트 2.6 부터는 순
단계적 실행계획에 의한 실행이후 수정하기가 힘들다.유연한 계획예측 불가능한 세상에서 완벽한 계획은 없다.애자일이 알맞다.핵심만을 모아서 만든 후 시장 반응을 살리고 점진적으로 발전시켜 나간다.고민할 시간에 해본다.생각복다 좋지 않다.(비효율적이다)하나의 팀이 여러 일을
스크럼과 애자일의 가치를 잊지 않게 해주는 사람어떻게 스크럼을 진행하는지 알려주거나 스크럼의 가치를 팀원들에게 리마인드 시켜준다. 보다 효율적이고 효과적으로 일하는 방법들을 고민하는 사람헌신적인 리더팀원들을 보호팀원 갈등 중재팀원 스스로 답을 찾을 수 있게 도와주는
자율적으로 일하면서 엉뚱한 일을 하지 않기 위해서내가 하는 일의 의미를 알기 위해서일의 우선순위를 결정하기 위해서엘레베이터 피치분기별 3개의 목표를 설정도전적이고 동기부여를 할 수 있는 목표 설정output이 아니라 outcome으로결과물을 보여줄 수 있도록 하자!반드
시간을 효율적 사용을 위해 사용할일 다 적기할일 완료하는데 걸릴 시간 추정작업 시간 기준으로 스케줄 정하기스케줄대로 일하기업무 작게 쪼개기무작정 작업 시간 추정실제로 얼마나 걸렸는지 작업시간 특정멀티 태스킹을 멀리하게 된다.스프린트 단위 설정스프린트별 작업일 수 확인하
데일리 스크럼 당일 업무 시작 전 프로덕트 오너는 필참은 아니다. 하는 이유 어떤일이 있던 24시간 안에 확인가능하다. risk 관리를 잘 할 수 있다. 방법 최대 15분 동안 진행한다. 무슨 일을 했고, 오늘 무슨 일을 할지, 현재 문제가 무엇인지를 나눈다. 업무 보고가 아니다 프로덕트 백로그 다듬기 언제든지 할 수 있다. 프로덕트 오너(주최자)와 ...