웹 개발 272

[Tomcat에러] Invalid byte tag in constant pool

Tomcat을 실행할 때, "Invalid byte tag in constant pool"라는 에러가 발생하며 프로그램이 동작하지 않는 문제가 발생할 수 있습니다. Invalid byte tag in constant pool 원인 이 에러는 프로그램을 빌드한 java 버전과 tomcat이 사용하는 버전이 달라서 발생하는 에러입니다. 만약 19이면 java 9를 사용해야 하는데 java 버전이 그보다 낮아서 생기는 것입니다. Invalid byte tag in constant pool 해결방법 이 문제의 해결방법은 두 가지가 있습니다. 1. tomcat의 java version과 프로그램 빌드 java 버전을 똑같이 맞춰줍니다. 2. tomcat에서 이 문제를 해결한 버전이 있습니다. 해당 버전으로 패치합..

웹 개발 2022.11.16

HTTP에서 localhost 호출 시 CORS 에러 발생하는 이유

개요 ActiveX가 없어지면서 ActiveX 프로그램을 Local Server를 활용한 프로그램으로 변경해야 했습니다. 그런데 HTTPS 서버에서는 localhost를 호출 가능한데, HTTP에서는 CORS 에러가 발생했습니다. 예전에는 분명히 호출이 됐던것 같은데 왜 안되는 것일까요? 원인 에러가 나는 원인에 대한 해답은 크롬 공식 블로그에 있습니다. Chrome is deprecating access to private network endpoints from non-secure websites as part of the Private Network Access specification. The aim is to protect users from cross-site request forgery (C..

웹 개발 2022.10.29

Spring Security에서 접근 권한 해제 방법

Spring Security를 사용할 때, 권한이 없는 페이지에 접근하려고 하면 로그인 페이지로 이동되거나 권한 오류가 리턴됩니다. 이 경우 다음과 같은 방법으로 해제할 수 있습니다. @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(final HttpSecurity http) throws Exception { http.authorizeRequests().antMatchers("/").permitAll(); } } 하지만 이 방법에는 문제가 있습니다. 바로 이렇게 WebSecurityConfigurerAdapter..

웹 개발 2022.07.19

AOP에서의 모든 메서드 로깅과 Custom Annotation을 활용한 No Logging 처리

Spring에서 애플리케이션 서비스들이 공통으로 처리할 기능들은 그 성격과 범위에 따라 인터셉터나 AOP(Aspect Oriented Programing)을 사용합니다. 제가 일하는 회사의 고객사에서 어느 날 프로그램이 어디까지 실행되다 오류가 발생했는지 알기 위해 모든 함수의 시작에는 "START" 로그를, 끝에는 "END"로그를 남겨달라고 했습니다. 그런데 프로그램에서 사용하는 함수가 한두 개도 아닌데, 모든 함수에 "START"와 "END" 로그를 남기는 것은 너무 힘든 일입니다. Spring에서는 AOP를 사용하여 손쉽게 모든 함수에 이런 로그를 남길 수 있습니다. import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.Afte..

웹 개발 2022.05.01

java - mkdir와 mkdirs의 차이

File f = new File("e:/test/test"); System.out.println("result:" + f.mkdir()); System.out.println("result:" + f.mkdirs()); 만약 e 드라이브에 test 폴더가 없다면 mkdir은 false를 리턴하며 실패하고, mkdirs는 true를 리턴하며 폴더도 정상적으로 생성합니다. 즉, mkdir은 경로상 마지막 경로만 생성하기 때문에 중간 경로가 없다면 경로를 생성을 하지 못하고 mkdirs는 전체 경로를 모두 생성하기 때문에 생성 권한만 있다면 정상적으로 경로를 생성합니다. 참고 주소 https://stackoverflow.com/questions/9820088/difference-between-mkdir-and-..

웹 개발 2022.05.01

Spring boot profile 환경별로 설정하는 방법(yaml).

spring boot는 환경 설정을 application.properties 또는 application.yml로 설정합니다. 한편, 개발을 하다 보면 로컬 서버, 개발서버, 운영서버 등에서 프로그램을 실행해야 하는데 매번 이 설정 파일을 수정하는 건 번거롭습니다. 특히 운영서버에서 설정을 바꾸다 잘못되면 심각한 문제가 발생하기도 합니다. 이때, yml의 경우 다음과 같이 파일 내에서 구분자(---)와 profiles 옵션으로 간단하게 처리할 수 있습니다. # local, dev, prod 공통 설정 server: port: 8080 --- spring: profiles: local datasource: url: "jdbc:mysql://local-server/local" username: "dbuser"..

웹 개발 2022.05.01

input, form 태그에 브라우저의 자동완성 기능 해제하는 방법

브라우저에서 input창에 이전에 입력했던 내용에 대해 자동 완성을 제공합니다. 이것을 브라우저에서 해제하는 방법이 있지만, 고객에게 일일이 다 해제하라고 할 수 없습니다. 이때, 약간의 코드 수정으로 이를 해결할 수 있습니다. 이와 같이 html tag의 autocomplete 옵션을 off로 하여 해결할 수 있습니다. 위 예제는 개별로 일일이 지정하는 방법이라 귀찮습니다. 다음과 같이 form tag 지정하여 한번에 해결할 수 있습니다. 단, 이 방법은 google chrome 브라우저에서는 동작하지 않습니다. 그 이유는 구글은 autocomplete 속성을 조작하는 행위가 모든 사용자에게 제공하는 것은 좋지 않다고 판단하기 때문입니다.

웹 개발 2022.04.17

Spring Boot에서 JWT 사용하는 방법

JWT란? JWT는 JSON Web Token의 약자로 JSON 포맷을 이용하여 사용자에 대한 속성을 저장하는 Claim 기반의 Web Token으로써 Token은 비공개 시크릿 키 또는 공개/비공개 키를 사용하여 서명됩니다. 예를 들어 서버는 "관리자로 로그인됨"이라는 클레임이 있는 토큰을 생성하여 이를 클라이언트에 제공할 수 있습니다. JWT의 장점 토큰은 세션과는 달리 서버가 아닌 클라이언트에 저장되기 때문에 서버의 부담을 덜 수 있다. RESTful과 같은 무상태(Stateless) 환경에서 데이터를 주고받을 수 있다. JWT 단점 및 주의사항 토큰 자체에 정보를 담고 있으므로 민감한 정보는 담으면 안된다. (탈취한 토큰을 공식 홈페이지에 붙여넣기 하면 바로 payload 확인 가능) 토큰의 길이..

웹 개발 2022.04.10
728x90
loading