본문 바로가기

분류 전체보기

(42)
MySQL VARCHAR vs TEXT 데이터베이스 설계할 때 문자열 데이터를 저장하는 컬럼 타입을 정하는 건 생각보다 복잡하다. 특히 VARCHAR와 TEXT 중에서 고민하는 경우가 많은데, 각각의 특성을 제대로 알고 써야 나중에 성능 문제로 고생하지 않는다.VARCHAR 타입이란?VARCHAR는 Variable Character의 줄임말로, 가변 길이 문자열을 저장하는 타입이다. MySQL에서는 VARCHAR(길이)처럼 최대 길이를 지정해야 한다.VARCHAR(50)으로 설정하면 최대 50자까지 저장할 수 있고, 실제 데이터가 10자면 10자만큼의 공간만 사용한다. 즉, 지정한 최대 길이보다 적은 데이터를 저장해도 남는 공간을 낭비하지 않는다.MySQL 5.0.3 이후부터는 VARCHAR의 최대 길이가 65,535바이트까지 가능하다. UT..
@PreAuthorize에서 상수(변수) 사용할 수 없는 이유 Spring Security에서 권한 검증을 위해 흔히 사용하는 애노테이션 @PreAuthorize.보통 아래와 같이 사용한다.@PreAuthorize("hasRole('ADMIN')")그런데 이때 "ADMIN" 같은 문자열을 상수로 관리하고 싶어서 이렇게 바꿔보고 싶어진다.const val ROLE_ADMIN = "ADMIN"@PreAuthorize("hasRole(ROLE_ADMIN)") // 이렇게 쓰고 싶다!하지만 이렇게 작성하면 애플리케이션 실행 중 예외가 발생한다.SpelEvaluationException: EL1008E: Property or field 'ROLE_ADMIN' cannot be found왜 안 될까?@PreAuthorize 안에서 사용되는 표현식은 Spring Expressi..
Spring Boot JPA 네이티브 쿼리로 환경별 스키마 동적 변경하기 @Table 카탈로그(catalog) 속성의 한계 (런타임 동적 변경 불가)Spring Boot + JPA로 개발하면서 프로젝트에서 기본적으로 사용하는 스키마 이외의 같은 DB의 다른 스키마에 접근해야 하는 요구사항이 있었다. 처음에는 JPA의 @Table 애너테이션에 있는 catalog (mysql 환경이므로, catalog로 스키마 설정 가능) 속성만 바꾸면 간단히 해결될 거라고 생각했다. (예를 들어, 엔티티에 @Table(catalog = "myapp_ci")처럼 설정하기) 그리고 실제로 catalog 설정 후 테스트 해보았을 때 잘 동작하는 것을 확인할 수 있었다.문제는 스키마 이름이 환경(운영, QA, 개발)별로 다르다는 것이었다. 그러면 엔티티에 @Table(catalog = "myapp_c..
pc ↔ 모바일 전환 시 일회용 토큰을 이용하여 로그인 기능 유지하기 개요 :PC-모바일 전환 기능 관련해서 로그인 상태가 유지되어야 한다는 요구사항인증/인가는 JWT로 관리 중PC API 서버와 모바일 API 서버는 분리됨프론트에서 액세스 토큰이나 로그인 정보를 URL로 바로 전달하는 건 보안상 위험이 있어서 안전한 로그인 전환 방식 설계/구현 필요1. pc모바일 전환 시 일회용 토큰 발급2. 전환 페이지에 url로 일회용 토큰 전달3. 일회용 토큰으로 액세스 토큰, 리프레시 토큰 전달 받음4. 로그인 상태 유지위와 같은 절차로 개발1회용 토큰 생성 시 대칭키 이용, 암복호화 가능한 것으로 만들어서 사용프로젝트에 AES256 복호화, 암호화하는 유틸 함수 생성object AES256CipherUtil { @Throws(NoSuchAlgorithmException::..
방송통신대학교 컴퓨터과학과 4학년 1학기 수강 과목 후기 4학년 1학기에 수강한 과목알고리즘소프트웨어공학컴퓨터 보안정보통신망운영체제데이터베이스 시스템4학년 1학기에는 컴퓨터 과학의 핵심적인 필수 과목들을 많이 들었다. 그만큼 공부할 내용이 많고 난이도도 꽤 있어서 학기를 끝내기가 여느 때보다 힘들었다. 그래도 끝나고 난 지금은, 컴퓨터 과학 전공 과목에 대해 많은 것들을 배운 것 같아서 좋다. 드디어 한 학기만 마치면 나도 컴퓨터 과학 전공자가 된다. 직장과 학업의 병행이 꽤나 힘들다는 것을 배운 1년 반, 얼른 졸업을 하고 싶다. 과목별 후기알고리즘개요알고리즘은 방송대 컴퓨터과학과에서 악명이 높은 과목이다. 무려 별명이 ‘무관용 교수님’이신 이관용 교수님의 과목이다.(뒷부분에 김진욱 교수님이 강의하시는 부분도 있다.) 그리고 컴퓨터과학과 전공과목 중에 가장..
Prometheus + Grafana instance 별칭 설정하기 개요 및 문제 Prometheus + Grafana를 적용하여 모니터링 시스템을 구축하였다. 여러 애플리케이션을 모니터링하는데 개선점이 생겼다. 바로 Grafana 대시보드에서 애플리케이션을 선택할 때 instance를 선택하는데, instance가 기본적으로 IP:포트번호의 이름으로 생성된다는 것이었다. 이때, 여러 서비스를 모니터링한다면 대시보드를 활용하려는 사람은 각 서비스의 포트 번호를 기억하고 있어야 한다. 그렇기 때문에 instance의 이름을 변경하거나 별칭을 설정하는 방법을 찾아보았다.해결방법Prometheus 설정파일 수정prometheus.yml 설정파일에 내용을 추가하여 instance의 이름을 설정할 수 있었다.Prometheus에서는 relabel_configs 설정이 없을 경우,..
Spring Boot Actuator, Grafana & Prometheus 모니터링 구축 및 연결 Spring Boot ActuatorSpring Boot Actuator는 애플리케이션의 상태 및 메트릭 정보를 제공하는 다양한 REST 엔드포인트를 제공대표적인 엔드포인트 : /actuator/health, /actuator/metrics, /actuator/info 등메트릭(Metric) 정보란?애플리케이션의 성능 및 동작 상태를 수치로 표현한 데이터시스템이 어떻게 동작하고 있는지를 숫자로 보여주는 정보주요 메트릭 종류jvm.memory.usedJVM이 현재 사용 중인 메모리 양jvm.gc.pauseGarbage Collection이 걸린 시간process.cpu.usage애플리케이션이 사용하는 CPU 비율system.cpu.usage전체 시스템에서 사용 중인 CPU 비율http.server.requ..
도커 & 쿠버네티스 스터디 4주차 - Kubernetes Probe & GitOps 개요 실습환경 배포지난 3주차와 동일 Pod LifeCycleProbe 개요Pod LifeCycle파드는 정의된 라이프사이클을 따른다.Pending → Running → Succeded or FailedNode 를 사용할 수 없는 상태Container 를 생성하기 위한 자원이 부족한 상태Container Image 를 아직 가져오지 못한 상태 | | Running | Pod Container 가 생성되었고 1개 이상의 Container 가 실행중이거나 시작, 재시작 상태 | | Succeeded | Pod 내부의 모든 Container 가 성공적으로 종료된 상태 | | Failed | Pod 내부 모든 Container 가 종료되었고, 적어도 1개 이상의 Container 가 실패로 종료된 상태 | | Unk..