코딩기록
230605 [Spring BOOT] build, war&jar , 암호화, 본문
18_warbuild
resources -> logback-spring.xml
당분간 설정할 일은 없지만 해석 하기
<?xml version="1.0" encoding="UTF-8"?>
<!-- logback-spring.xml 을 통해 상세한 설정이 가능하다. -->
<!-- 60초마다 설정 파일의 변경을 확인 하여 변경시 갱신 -->
<configuration scan="true" scanPeriod="60 seconds">
<!--
%d : 로그의 기록시간을 출력한다.
%p : 로깅의 레벨을 출력한다.
%F : 로깅이 발생한 프로그램의 파일명을 출력한다.
%M : 로깅이 발생한 메소드의 이름을 출력한다.
%l : 로깅이 발생한 호출지의 정보를 출력한다.
%L : 로깅이 발생한 호출지의 라인수를 출력한다.
%t : 로깅이 발생한 Thread명을 출력한다.
%c : 로깅이 발생한 카테고리를 출력한다.
%C : 로깅이 발생한 클래스명을 출력한다.
%m : 로그 메시지를 출력한다.
%n : 개행 문자를 출력한다.
%% : %를 출력
%r : 어플리케이션이 시작 이후부터 로깅이 발생한 시점까지의 시간을 출력한다.(ms)
-->
<!-- 패턴 등록 -->
<property name="LOG_PATTERN" value="%-5level %d{yy-MM-dd HH:mm:ss}[%thread] [%logger{0}:%line] - %msg%n"/>
<!-- Appenders : CONSOLE -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<!-- 출력 패턴 -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${LOG_PATTERN}</pattern>
</encoder>
</appender>
<!-- Appenders : FILE -->
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 저장 위치 -->
<file>C:/logs/all.log</file>
<!-- 출력 패턴 -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${LOG_PATTERN}</pattern>
</encoder>
<!-- Rolling 정책 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- .gz,.zip 등을 넣으면 자동 일자별 로그파일 압축 -->
<!-- i 는 순서(파일이 같은 날짜에 여러개 생길수도 있음), 10mb 가 되면 짜를거거든 -->
<fileNamePattern>C:/logs/all.%d{yyyy-MM-dd}_%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- 파일당 최고 용량 kb, mb, gb -->
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!-- 일자별 로그파일 최대 보관주기(~일), 해당 설정일 이상된 파일은 자동으로 제거-->
<maxHistory>30</maxHistory>
</rollingPolicy>
</appender>
<!-- Root Logger -->
<!-- 실 서비스에는 파일로 봐야됨. 파일에 대한 내용 -->
<root>
<appender-ref ref="console" />
<appender-ref ref="file"/>
</root>
</configuration>
1. war 파일로 실행
로그 파일 보는법 (1)
로그백은 디버그랑 트레이스로 잡히기 때문에 별에 별걸 다보여줘서
필요한것만 보여주는 로그설정 해주기
logging.level.root=info


로그 파일 보는법 (2)
war 파일 빌드 (Maven install) 해서
target 에 있는 war 파일
톰캣 wapapps 에다가 복붙하고
bin 에다가 cmd 켜서 startup 입력
그러고 페이지 켜서 localhost:8080 해서 실행되는지 보고
c드라이브 -> logs -> all파일에 로그 뜨는지 확인
== 용량 차지하는거 싫으면 maven clean 하면 빌드했던거 싹 사라짐
회사가면 막 클린하지 말기 (기존 빌드 파일이 필요할 경우가 있음)
2. jar 파일로 실행
19_JarBuild
jar 생성
스프링부트 스타트 안씀
web, tomcat 사용 복붙
내부톰켓 쓸거니까 서버포트 80 설정
권한문제가 발생할 수 있으니까 c드라이브 gdj63 에서 빌드한 root 파일 집어넣고
gdj 63 에서 cmd 실행
cmd 자르파일 실행시 startup 말고 바로 java -jar ROOT.jar 하고 엔터 누르면
내장톰캣이니까 80으로 실행시키면
logs 파일에 all파일에 로그 찍힘
jar는 쉽게 서비스가 다운되므로 사용 권장 하지 않는다.
한번 보여준거임
profile

- application.properties
logging.level.root = debug
prof.name = local
- application-dev.properties 생성
logging.level.root = trace
prof.name = dev
- application-prod.properties 생성 -> 나뭇잎 모양 아님 (서버에서 3개부터 인정 안해줌, 안먹히는건 아님)
logging.level.root = info
prof.name = prod
controller
@RestController
public class ProfileController {
@Value("${prof.name}")private String name;
Logger logger = LoggerFactory.getLogger(getClass());
@GetMapping(value="/")
public String home() {
logger.info("start home");
logger.info("profile name : "+ name);
return "{'msg' : 'import profile : application-'"+name+".properties'}";
}
}
톰캣 -> conf -> catalina
복붙하고
bin 에서 cmd
정보 개많이 올라감 debug 로 설정해서 그런거임
http://localhost:8080/
21_PassEncoder
암호화
특징
1. 몇자를 집어넣든 같은 걸 반환?
2. 똑같은 내용을 집어넣는거 이외에는 암호를 풀 수 없다.
Spring security 체크하고 프로젝트 만들기
EncodeController
@RestController
public class EncodeController {
Logger logger = LoggerFactory.getLogger(getClass());
private String hash = "";
@Autowired PasswordEncoder encoder;
// 평문(plain text) 을 암호화(encoded)
@GetMapping(value="encode/{msg}")
public HashMap<String, String> home(@PathVariable String msg){
HashMap<String, String> map = new HashMap<String, String>();
hash = encoder.encode(msg);
logger.info(msg+"=>"+hash);
map.put("plain", msg);
map.put("encoded", hash);
return map;
}
// 입력값이 암호화된 값과 일치하는지 확인
@GetMapping(value="/confirm/{msg}")
public HashMap<String, Boolean> confirm(@PathVariable String msg){
// 같은 평문이라도 암호화 된 값은 계속 달라진다.
// sault 라는 임의의 값을 넣어 암호화 하기 때문에 그렇다.
// 그렇기 때문에 평문(rawPassword)을 암호화 해서 비교하는 것으로 확인은 불가능 하다.
boolean success = encoder.matches(msg, hash);
HashMap<String, Boolean> map = new HashMap<String, Boolean>();
map.put("match",success);
return map;
}
}
securityConfig
@Configuration
@EnableWebSecurity
public class SecurityConfig {
// 암호화 관련 빈 등록
@Bean
public PasswordEncoder getPasswordEncoder() {
return new BCryptPasswordEncoder();
}
// url 접근시 특정 기능을 실행/해제 해 주는 기능
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
return http.httpBasic().disable().build();
}
}
- pass 의 암호화

- f5 하면 pass 의 암호화가 계속 바뀜

- localhost/confirm/pass 했을때 true
-localhost/confirm/password 로 했을 때 false

'study' 카테고리의 다른 글
| 230608 [Spring BOOT] External Library (디테일), Jsoup(크롤링), (0) | 2023.06.08 |
|---|---|
| 230607 [Spring BOOT] 암호화, External Library(로그인 까지) (0) | 2023.06.07 |
| 230601 [Spring BOOT] 14 이어서 (0) | 2023.06.02 |
| 230601 [Spring BOOT] 13_Login - Properties (0) | 2023.06.01 |
| 230531 [Spring BOOT] 12_api (0) | 2023.05.31 |