일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- JPQL
- 일대다
- 지연로딩
- 낙관적락
- 스프링 폼
- 즉시로딩
- querydsl
- eager
- 백트래킹
- FetchType
- exclusive lock
- PS
- 연관관계
- 스토어드 프로시저
- 데코레이터
- 유니크제약조건
- fetch
- 비관적락
- 이진탐색
- 동적sql
- dfs
- shared lock
- SQL프로그래밍
- 힙
- execute
- CHECK OPTION
- 다대다
- 연결리스트
- BOJ
- 다대일
- Today
- Total
목록All (557)
흰 스타렉스에서 내가 내리지
/** * 1. * 이 어노테이션이 생성될 수 있는 위치를 지정한다. * PARAMETER로 지정했으니 메소드의 파라미터로 선언된 객체에서만 사용할 수 있다. * 이 외에도 클래스 선언문에 쓸 수 있는 TYPE 등이 있다. */ /** * 2. * @Retention 어노테이션은 라이프사이클, * 즉, 어노테이션이 언제까지 살아 남아 있을지를 정하는 역할을 한다. */ @Target(ElementType.PARAMETER) // 1 @Retention(RetentionPolicy.RUNTIME) // 2 public @interface LoginUser { } @RequiredArgsConstructor @Component public class LoginUserArgumentResolver implem..
public PostsResponseDto findById(Long id){ Posts entity = postsRepository.findById(id) .orElseThrow(() -> new IllegalArgumentException("해당 게시글이 없습니다. id=" + id)); return new PostsResponseDto(entity); } /** * readOnly = true 옵션을 주면, * 트랜잭션 범위는 유지하되, 조회 기능만 남겨두어 조회 속도가 개선되기 때문에, * 등록, 수정, 삭제 기능이 전혀 없는 서비스 메서드에서 사용하는 것을 추천한다. */ @Transactional(readOnly = true) public List findAllDesc(){ return post..
@RequiredArgsConstructor @RestController public class PostsApiController { private final PostsService postsService; } 스프링에서 Bean을 주입받는 방식은 다음 3가지가 있다. 1. @Autowired 2. setter 3. 생성자 이 중 가장 권장하는 방식이 생성자로 주입받는 방식이다. @Autowired는 권장하지 않는다. 즉, 생성자로 Bean 객체를 받도록 하면 @Autowired와 동일한 효과를 볼 수 있다. 생성자는 lombok 라이브러리의 @RequiredArgsConstructor에서 해결해 준다. final이 선언된 모든 필드를 인자값으로 하는 생성자를 이 어노테이션이 생성해준다. 생성자를 직접 ..
[Command + Shift + A] 단축키를 사용해 Action 검색창을 열어 share project on github을 검색한다. 로그인창이 뜨면 로그인하고, 다음과 같이 깃허브에 생성할 저장소 정보를 입력하는 화면이 나온다. Share 버튼을 누르면 깃허브 저장소와 동기화를 진행한다. 커밋하기 [Command + K] 푸시하기 [Command + Shift + K]
공통 업무에 관련된 코드를 모든 페이지마다 작성해야 한다면 중복된 코드가 많아지고, 서버의 부하를 주고, 유지보수도 쉽지 않게 된다. 따라서 공통 부분을 따로 빼서 관리하는게 좋은데, 이 때 사용할 수 있는 것이 이 세가지. 1. Filter 2. Interceptor 3. AOP Interceptor와 Filter는 Servlet 단위에서 실행된다. 반면 AOP는 메소드 앞에 Proxy 패턴의 형태로 실행된다. 실행순서를 보면 Filter가 가장 밖에 있고, 그 안에 Interceptor, 그 안에 AOP가 있는 형태이다. 따라서 요청이 들어오면 Filter → Interceptor → AOP → Interceptor → Filter 순으로 거치게 된다. 1. Filter Spring 이 아닌 톰캣과 ..
Spring Interceptor란? 서버에 들어온 request 객체를 Controller의 Handler로 도달하기 전에, 개발자가 원하는 추가적인 작업을 한 후 Handler로 보낼 수 있도록 해준다. 왜 사용하는가? 예를들어, 관리자 계정만이 접근할 수 있는 핸들러에는 접근하는 사용자가 관리자인지 일반 유저인지 확인하는 코드를 작성해주어야 한다. 핸들러의 수가 수백개, 수천개가 된다면 같은 코드를 그 만큼 작성해주어야 한다. Interceptor를 사용하면, 개발자는 Handler 수 만큼 작성했던 코드를 인터셉터 클래스에 한번만 작성하면 된다. 이로 인해 코드의 양이 현저히 줄어 메모리 낭비와 코드의 누락가능성을 줄일 수 있다. 어떻게 사용하는가? 1. 스프링에서 제공하는 org.springfr..
WebFlux는 클라이언트, 서버에서 reactive 스타일의 어플리케이션 개발을 도와주는 모듈이다. reactive-stack web framework이며 non-blocking에 reactive stream을 지원한다. webmvc나 webflux 둘 다 사용 가능하다. Spring MVC에서는 명령형 논리, JDBC, JPA를 가질 수 있다. Spring WebFlux에서는 기능적 엔드 포인트, 이벤트 루프, 동시성 모델을 가질 수 있다. WebFlux가 생긴 이유 1. 적은 양의 스레드와 최소한의 하드웨어 자원으로 동시성을 핸들링하기 위함. netty와 같은 async, non-blocking 서버를 사용한다. 2. 함수형 프로그래밍. java5에서 rest controllers 나 unit te..
# a.txt . $ cat a.txt 123 234 345 # 파일 내용 비우기 $ cat /dev/null > a.txt # 안된다면, sudo sh -c 'cat /dev/null > nohup.out' 내용이 없는 것을 확인할 수 있다. $ cat a.txt
sudo apt-get update sudo apt-get install npm npm install -g n npm i npm run build sudo npm i -g serve serve -s build 에러 : EACCES: permission denied, mkdir '/usr/local/lib/node_modules' https://thisisjoos.tistory.com/377 노드 버전이 안맞음 업데이트 -> n lts mkdir: cannot create directory ‘/usr/local/n’: Permission denied >> N_PREFIX=$HOME/.local n stable export N_PREFIX=$HOME/.local 터미널 껐다키기
node-sass 를 설치하려고 sudo npm install -g node-sass 를 하니 /usr/local/bin/node-sass -> /usr/local/lib/node_modules/node-sass/bin/node-sass > node-sass@4.13.0 install /usr/local/lib/node_modules/node-sass > node scripts/install.js Unable to save binary /usr/local/lib/node_modules/node-sass/vendor/linux-x64-72 : Error: EACCES: permission denied, mkdir '/usr/local/lib/node_modules/node-sass/vendor' at Ob..