유레카 클라이언트가 유레카 서버에서 registry를 가져오는 방식. 유레카 서버에서는 default로 자신이 레지스트리 정보를 캐싱하여 주기 때문에 실제 정보를 얻어오는데 약간의 시간차가 있을 수 있다. 유레카 클라이언트는 등록 시, 곧바로 자신이 살아있다는 Status 정보를 서버로 주기 떄문에 즉각적으로 등록할 수도 있다. 유레카 클라이언트 등록 딜레이는 서버,클라이언트,리본에 관한 옵션 설정등을 통하여 줄일 수 있다. 1. 유레카 서버의 캐쉬 업데이트 주기 조정옵션 eureka.server.response-cache-update-interval-ms: 3000 # 기본30초 2. 유레카 클라이언트의 레지스트리를 받아오는 주기를 조정. eureka.client.registryFetchInterval..
목적 IP & 도메인 로깅을 위해 InetAddress.getLocalHost() 사용으로 발생할 수 있는 성능 이슈, 나아가 AWS EC2 환경에서의 동작 방식 분석 배경 사내 타 프로덕트에서 라이브 중인 서버의 Latency가 급격하게 튀는 현상이 발생. 모든 Request마다 InetAddress.getLocalHost()를 사용하여 IP 주소를 로깅하고 있었음. InetAddress.getLocalHost()를 사용하면 DNS 서버를 통해 IP 정보를 가져올텐데 부하가 크지 않을까? 결론을 먼저 말한다면, API Call이 올때마다 InetAddress.getLocalHost()를 호출하게 되면 치명적인 성능 이슈를 초래한다. 꼭 사용해야 한다면, 처음 서버 부팅시 static하게 정보를 받아 재..
명령어 모음 shutdown : 시스템 종료 halt : 시스템 종료 init 0 : 시스템 종료 poweroff : 시스템 종료 reboot : 시스템 재부팅 init 6 : 시스템 재부팅 shutdown -r now : 시스템 재부팅 pwd : 현재 자신이 위치하는 디렉토리 cd : 디렉토리 이동 ls : 자신이 속해있는 폴더 내에서의 파일 및 폴더들을 표시 mkdir : 디렉토리 생성 ( 폴더 생성 ) == 앞으로 폴더를 디렉토리로 쓰겠습니다. rmdir : 디렉토리 삭제 touch : 파일크기가 0인 파일 생성 ( 잘 쓰진 않지만, 파일 시간 정보를 변경하는 용도로 쓰이거나, 하드디스크의 오류를 판단할 때 쓰입니다) cp : 파일 복사 ( 디렉토리 내부까지 복사하기 위해서는 cp -R 이라는 옵션..
그냥 구현이 되게 하는 코더가 아닌 구현을 "잘" 하는 사람이 되고싶어졌다..ㅎㅎ
[Dependency Scope]compile : 기본영역. 컴파일 시점에 필요하고 배포할때도 포함된다. 이 프로젝트를 dependency 설정된 다른 프로젝트에서도 포함 된다.provided : 컴파일 시점에는 필요하지만 배포 시점에는 불필요한 라이브러리로 JDK, servlet API, Java EE API 등이 해당된다.runtime : 컴파일 시점에는 필요없지만 runtime 시점에 필요한 라이브러리.system : Repository에서 검색을 하지 않고 명시된 위치에서 jar를 이용한다. 그 외 provided와 유사함.test : 테스트 컴파일과 실행 시점에만 사용됨import : Maven 2.0.9 이후에서만 적용. 다른 POM 설정 파일에 정의되어 있는 의존 관계 설정을 현재 프로젝트로..
[MVC구성요소-DispatcherServlet을 구성하는 인터페이스들]1. multiPartResolver--> 해당 파일을 binary로 쪼개서 보내고, 꺼내는 api 구현체가 들어있는 인터페이스.--> 스프링부트에서는 이미 자동으로 등록되어 있어서 바로 파일 업로드 가능 2.localeResolver클라이언트의 지역정보를 파악하는 인터페이스로 추후에 메시지소스를선택하여 지역권의 메시지를 보낼 수 있도록 도와준다.--> AcceptHeaderLocaleResolver 라는 구현체로 구현되고 있는데,이구현체가 지역정보를 파악하는 것은 http-request안의 accept-language 헤더를보고 파악한다.--> Cookie, Session 등을 기반으로 판단하는 구현체들도 있다. 3. ThemeRe..
[npm]- node package manager : 모듈 관리(설치, 업데이트, 삭제 등)하기위한 매니저 - npm으로 외부 모듈 설치 : node_modules 디렉토리에 저장, 우리가 설치한 외부 모듈이 의존 모듈까지 같이 설치함- node_modules는 따로 git 버젼 관리하지않음 : index.js 만 있으면 바로 실행 x, 사용하는 모듈 설치해야함- 요즘엔 페이스북에서 만든 yarn 이라는 패키지 매니저도 있음 : https://yarnpkg.com/lang/en/ [npm, package.json으로 쉽게 모듈 설치하기]1) npm init : package.json 생성 - 프로젝트 의존 모듈 관리(사용 모듈 네임, 버젼), 프로젝트 정보2) npm install 모듈명 --save :..
1. Security-인증순서-a. 유저정보 가져오기(UserDetailsService.loadUserByUsername() 등)b. AuthenticationProvider 에서 authenticate(Authentication authentication)메소드로가지고온 디비유저정보와 authenticate(Authentication authentication)로 접속한유저 정보(authentication)를 비교하여 비밀번호가 같은지 비교하게되고 인증에 성공하게되면 Authentication객체 를 돌려준게된다. --> 아이디/패스워드 사용자 정보를 넣고 실제 가입된 사용자인지 체크한후 인증에 성공하면 사용자의 principal과 credential 정보를 Authentication에 담습니다. **..
1. DAO,DTO(=VO, Value Object)DAO : data에 접근용으로 하나 만들어놓고 계속 사용하는 객체--> DB와 연결할 Connection 객체 생성--> DB와 연결--> 작업 후 리소스를 시스템에 돌려준다.DTO : Controller,DB,View로 데이터를 뿌려주는 객체--> getter,setter만 존재VO : DTO와 역할 같지만 getter만 존재한다.(Read Only) 2. DTO vs VO둘다 데이터 가지고있고, 전송하는 클래스들이지만VO는 넓은범위에서 쓰이며, 좀더 영속적인 정보들을 담고있고, mapper와 연결한다.하지만, DTO는 View -> Controller 같이 레이어 이동시 꼭 필요한 정보만최소한으로 담고, 영속적이지 않아도 되는 데이터를 주로 운반한..
1. @Autowired, @Resource 차이--> Resource("빈이름") 이렇게 빈의 이름 기반으로 검색하여 빈 주입한다.자동으로 등록되는 빈의 이름은 클래스의 첫문자가 소문자로 바뀐 이름 2. @Component컴포넌트 어노테이션이 선언된 클래스의 빈들은 자동 등록된다.즉, 빈의 자동등록을 위하여 쓰는 어노테이션. 3. 빈들 끼리 의존성, 참조관계가 있을 때, 생성순서에 따른 문제A라는 빈을 만들기 위하여, B라는 빈을 만들어야 한다.하지만, 스프링 부트 특성상 위의 패키지부터 아래로 쭉 훑기 떄문에B 빈은 A보다 나중에 만들어진다(알파벳순서)그러므로, 그냥 컴파일 할시에는 B빈이 만들어 지지않았으므로 에러가난다.이런 참조관계와 그에따른 생성순서문제를 해결하려면 A빈에 참조관계를 나타내는 @..