Java & Spring 15

Spring Security 개념정리

대부분의 시스템에서는 회원의 관리를 하고 있고, 그에 따른 인증(Authentication)과 인가(Authorization)에 대한 처리를 해주어야 한다. Spring에서는 Spring Security라는 별도의 프레임워크에서 관련된 기능을 제공하고 있는데, 이번에는 Spring Security에 대해서 알아보도록 하겠다. 먼저 보안용어를 이해하고 넘어가야 한다. 접근 주체(Principal) : 보호된 리소스에 접근하는 대상 인증(Authentication) : 보호된 리소스에 접근한 대상에 대해 이 유저가 누구인지, 애플리케이션의 작업을 수행해도 되는 주체인지 확인하는 과정 인가(Authorize) : 해당 리소스에 대해 접근 가능한 권한을 가지고 있는지 확인하는 과정(After Authentica..

Java & Spring 2024.03.12

java8 람다 표현식

람다란 무엇인가? 람다 표현식은 메서드로 전달할 수 있는 익명 함수를 단순화한 것이다. 즉, 람다는 어떤 함수의 매개변수로 다른 함수를 넣고 싶을 때 사용한다. 익명 : 보통의 메서드와 달리 이름이 없으므로 익명이라 표현한다. 함수 : 람다는 메서드처럼 특정 클래스에 종속되지 않으므로 함수라고 부른다. 전달 : 람다 표현식을 메서드 인수로 전달하거나 변수로 저장할 수 있다. 간결성 : 익명 클래스처럼 많은 자질구레한 코드를 구현할 필요가 없다. 람다의 구성 요소 - 파라미터 리스트 - 화살표 : 파라미터 리스트와 바디를 구분한다 - 바디 : 람다의 반환값에 해당하는 표현식 함수형 인터페이스는 정확히 하나의 추상 메서드를 지정하는 인터페이스이다. @FunctionalInterface 어노테이션을 붙여 주면..

Java & Spring 2024.03.01

자바 모니터링 설정

맥os 환경에서 모니터링 설정하기 각각 설정해줄 부분은 스프링부트설정, 프로메테우스 설정, 그라파나 설정이다 모니터링 시스템은 기본적으로 로그발생 => 데이터 수집 => 통합 => 시각화의 단계로 되어있다. 스프링부트 actuator 설정 - (metrics 출력을 위해) build.gradle implementation 'org.springframework.boot:spring-boot-starter-actuator' runtimeOnly 'io.micrometer:micrometer-registry-prometheus' application-{환경}.yml management: health: db: enabled: false endpoints: web: exposure: include: health,..

Java & Spring 2024.01.30

H2 테스트DB에 mysql 함수 인식불가 에러

회사라 짧게 글씀 상황: 컬럼값이 암호화 되어 들어가는데 like검색해야함 querydsl 사용하여 날쿼리로 작성하지 못하고있는데 AES_DECRYPT(UNHEX(d.number), 'secretKEY') 이런식으로 검색이 돼야했음 그래서 잘~ 작성하고 테스트 돌렷는데 Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Function "AES_DECRYPT" not found; 이렇게 에러가 발생 h2테스트 디비에 해당 함수가 없어서 발생, 자바코드로 연결해주는 방법이 있다. 다른건 못찾아봄 시원~하게 전체코드 간다 package coma.aaa.bbb.global.common; import javax.crypto.Cipher; import javax.crypt..

Java & Spring 2023.11.07

java maven을 gradle로 변환

Gradle 소개 Gradle은 다양한 프로그래밍 언어를 지원하는 빌드 자동화 도구. 빌드는 소스코드로 작성된 파일을 컴퓨터나 휴대폰 등 에서 실행가능한 소프트웨어 가공물로 변환하는 과정을 말한다, 자바를 예로 들면 아래의 과정을 거친다. 소스 코드 작성 자바 컴파일러가 소스코드.java를 -> 바이트코드.class로 컴파일 테스트 소스 컴파일 테스트 실행(유닛테스트, 통합테스트 등) jar 혹은 war 파일로 패키징 헬스체크 후 빌드 결과 출력 Apache Ant 및 Apache Maven의 컨셉을 기반으로 하지만, XML로 설정파일을 작성하는 Maven과는 대조적으로 훨씬 간단한 Groovy 언어를 사용. 또한 Gradle은 Apache License 2.0 기반의 오픈소스 이며 JVM(자바 가상 머..

Java & Spring 2023.09.24

java LinkedList 정리

LinkedList란? 연결 리스트(LinkedList)는 각 노드가 데이터와 포인터를 가지고 한 줄로 연결되어 있는 방식의 자료구조이다. 데이터를 담고 있는 노드들이 연결되어 있고, 노드의 포인터가 이전 노드와 다음 노드와의 연결을 담당. Node는 LinkedList에 객체를 추가하거나 삭제하면 앞뒤 링크만 변경되고 나머지 링크는 변경되지 않는다. 중간에 데이터를 추가나 삭제하더라도 전체의 인덱스가 한 칸씩 뒤로 밀리거나 당겨지는 일이 없기에 ArrayList에 비해서 데이터의 추가나 삭제가 용이하나, 인덱스가 없기에 특정 요소에 접근하기 위해서는 순차 탐색이 필요로 하여 탐색 속도가 떨어진다는 단점이 있다. 그러므로 탐색 또는 정렬을 자주 하는 경우엔 배열을 사용하고 데이터의 추가/삭제가 많은 경우..

Java & Spring 2021.08.21

java ArrayList 정리

ArrayList란? ArrayList는 List 인터페이스를 상속받은 클래스로 크기가 가변적으로 변하는 선형리스트이다. 일반적인 배열과 같은 순차리스트이며 인덱스로 내부의 객체를 관리한다는점이 유사하지만 한번 생성되면 크기가 변하지 않는 배열과는 달리 ArrayList는 객체들이 추가되어 저장 용량(capacity)을 초과한다면 자동으로 부족한 크기만큼 저장 용량(capacity)이 늘어난다. ArrayList에서 특정 인덱스의 객체를 제거하게 되면, 제거한 객체의 인덱스부터 마지막 인덱스까지 모두 앞으로 1칸씩 앞으로 이동한다. 객체를 추가하게 되면 1칸씩 뒤로 이동하게 된다. 인덱스 값을 유지하기 위해서 추가/삭제 시 전체 객체가 위치가 이동한다. 따라서 잦은 원소의 이동, 삭제가 발생할 경우 Ar..

Java & Spring 2021.08.21

java 서블릿 개념정리

Servlet의 개념 웹 환경에서 HTTP를 통한 통신을 할 때 서버에서 처리되는 내용은 다음과 같다. 여기서 의미있는 비즈니스 로직은 초록박스의 단 두줄. 하지만 통신을 위한 프로토콜연결 부터 내용파싱 응답메시지 생성 등 부수적인 일이 많다. 서블릿을 지원하는 WAS 핵심 비즈니스로직을 제외한 다른 것들을 자동으로 해주는 기능을 한다. 서블릿이란? Java Thread를 이용하여 동작한다. MVC 패턴에서 Controller로 이용된다. 클라이언트의 요청에 대해 동적으로 작동하는 웹 어플리케이션 컴포넌트 HTML 변경 시 Servlet을 재컴파일해야 하는 단점이 있다. 서블릿 사용시 HTTP 요청, 응답의 흐름 WAS는 Request, Response 객체를 새로 만들어서 서블릿 객체 호출 개발자는 R..

Java & Spring 2021.08.16

java 웹 서버 및 WAS 개념정리, 차이점

웹 서버(Web Server) HTTP 기반으로 동작 정적 리소스 제공, 기타 부가기능 정적(파일) HTML, CSS, JS, 이미지, 영상 예) NGINX, APACHE 웹 애플리케이션 서버(WAS - Web Application Server) HTTP 기반으로 동작 웹 서버 기능 포함+ (정적 리소스 제공 가능) 프로그램 코드를 실행해서 애플리케이션 로직 수행 - 동적 HTML, HTTP API(JSON) - 서블릿, JSP, 스프링 MVC 예) 톰캣(Tomcat) Jetty, Undertow 차이점 웹 서버는 정적 리소스(파일), WAS는 애플리케이션 로직 자바는 서블릿 컨테이너 기능을 제공하면 WAS 웹 시스템의 구성 WAS는 정적 리소스, 애플리케이션 로직 모두 제공 가능해서 WAS, DB 만으..

Java & Spring 2021.08.16

java int to char 형변환

알고리즘 풀며 정리하는 형변환 문자열에서 문자의 비교시 int 를 스트링 또는 char로 변환할 경우가 있다. Java에서int를char로 변환하는 메소드는(char),Character.forDigit()및toString() 가 있다. 1. (char) 타입 캐스팅을 사용하여 ASCII 값을 가져 와서int의char를 얻는다. int value_int =1; //이렇게하면 안됨. char value_char1 = (char)(value_int); //이렇게 해줘야함. char value_char2 = (char)(value_int +'0'); 위에 value_char1 처럼 하면 ascii 값 1 (인쇄 할 수없는 머리글 시작 문자)로 문자를 인쇄하게되어 잘못된 값이 나온다. 숫자 (0-9)를 변환하려면..

Java & Spring 2021.08.15