Notice
Recent Posts
Recent Comments
Link
«   2026/03   »
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
29 30 31
Archives
Today
Total
관리 메뉴

코딩기록

230605 [Spring BOOT] build, war&jar , 암호화, 본문

study

230605 [Spring BOOT] build, war&jar , 암호화,

9-99zy 2023. 6. 5. 12:28

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 

spring.profiles.active=dev

복붙하고

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