개발/백엔드 (15) 썸네일형 리스트형 코틀린 안티패턴 코틀린의 장점은 코드의 안전성 & 간결성인데,장점을 죽이는 코드를 작성하지 말자는 취지로 작성합니다. (과거의 나포함..)최소한의 안티패턴은 알아둔다면 어느정도 도움이 되겠죠. 1. Null Safety 안티패턴 코틀린의 가장 큰 장점 중 하나가 nullable과 non-nullable 타입의 명확한 구분입니다.하지만 실수로 null 안전성을 해치는 코드가 자주 등장합니다. 1-1. NotNull Assertion (!!) 남발// 잘못된 코드var name: String? = "Jin"println(name!!.length) // name이 null이면 바로 NPE!// !!는 정말 null일 가능성이 0%임을 100% 확신할 때만 써야 합니다// 실무에선, 외부 입력이나 파싱 데이터는 null이 들어.. Spring 대용량 엑셀 업로드 어드민을 관리 할 경우 대용량 엑셀을 업로드 할 경우가 생깁니다.단순하게 엑셀만 업로드 할 경우 OOM, 타임아웃, 파일 관련, 네트워크 관련 에러 등 여러 에러가 발생할 수 있습니다. 아래 5가지를 주의해서 만들고, DB 모니터링으로 최적화가 가능합니다. 1. 스트리밍 방식 파일 읽기파일 전체를 메모리에 로드하지 않고, 스트리밍 방식으로 한 행씩 순차적으로 읽음Apache POI의 SXSSF(Streaming XML SAX Parser) 또는 xlsx-streamer 라이브러리 활용메모리 사용량을 최소화하여 OOM(Out of Memory) 방지public class ExcelStreamReader { public void readExcelStream(String filePath) { .. 내가 보려고 작성하는 각종 docker 설치 명령어 - mysql, redis, kafka, mongo windows 기준이고, docker desktop이 설치가 되어 있어야 합니다. 1. docker-compose.ymlversion: '3.8'services: # Redis 설정 redis: image: redis:latest container_name: redis ports: - "6379:6379" command: redis-server --requirepass mypassword --save 60 1000 # 60초 동안 1000번 이상 변경시 스냅샷 저장 restart: unless-stopped volumes: - redis-data:/data # MongoDB 설정 mongodb: image: mongo:latest co.. Kotlin Spring의 장점과 코루틴 가장 큰 장점을 얘기해 보면 아래 3개정도로 요약 할 수 있을 것 같다 1. null 안전성과 편한 사용// 컴파일 시점에 null 체크fun processUser(user: User?) { // null이면 메서드 실행 안함 user?.process() // null이면 기본값 사용 return user?.name ?: "Unknown"}// Javapublic String getUserName(User user) { return Optional.ofNullable(user) .map(User::getName) .orElse("Unknown");} 2. Lombok 제거// Data Class로 보일러플레이트 제거// java reco.. Spring Security OAuth OAuth2는 사용자가 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는 접근 위임을 위한 개방형 표준입니다. OAuth(Open Authorization) 쉽게 얘기하면 = 신뢰할 수 있는 다른 서비스에 로그인을 맡기는 것OAuth는 인증을 위한 개방형 표준 프로토콜입니다. 프로세스 요약👤Resource Owner: 사용자🖥️Client: OAuth를 사용하는 웹/앱🔑Authorization Server: 인증 서버 (네이버/카카오/구글의 로그인 등 인증 처리)📦Resource Server: 리소스 서버 (사용자 정보를 가진 서버, 프로필, 이메일 👤 사용자 🖥️ 클라이언트 .. Spring GraphQL 빠르게 GraphQL 기본 개념 정리 빠르게 GraphQL 기본 개념 정리GraphQL | A query language for your API Facebook에서 개발한 API를 위한 쿼리언어입니다.특정 정보를 받기 위해 여러개의 API를 호출(under-fetching) 하거나단순한 정보를 위해 너무 큰 API를 호출(over-fetching) 하yangori.tistory.com 기본 개념은 위 포스트 참고 1. 기본 설정// build.gradledependencies { implementation 'org.springframework.boot:spring-boot-starter-graphql'}// application.ymlspring: graphql: graphiql: .. 빠르게 GraphQL 기본 개념 정리 GraphQL | A query language for your API Facebook에서 개발한 API를 위한 쿼리언어입니다.특정 정보를 받기 위해 여러개의 API를 호출(under-fetching) 하거나단순한 정보를 위해 너무 큰 API를 호출(over-fetching) 하는 문제를 방지 할 수 있습니다. REST API vs GraphQLREST: 여러 엔드포인트 (/users, /posts, /comments 등) GraphQL: 단일 엔드포인트 (/graphql)에서 모든 요청 처리REST API:GET /api/usersGET /api/users/1POST /api/usersGET /api/users/1/postsGraphQL:POST /graphql{ "quer.. Redis Serializer 비교 3줄요약GenericJackson2JsonRedisSerializer 클래스 정보가 들어가는게 싫었다.RedisSerializer를 구현한 CustomJsonRedisSerializer 를 사용했다.성능도 괜찮고 사용도 편했다. ----------------------------------------------------------------------------------------- GenericJackson2JsonRedisSerializer, StringRedisSerializer일반적으로 위 2개를 가장 많이 쓰는 것 같습니다. 업무에서 레디스를 주로 캐싱 용도로 사용 했는데, 스프링에서는 @Cacheable 메서드로 간단하게 사용 할 수 있습니다.간단하고 사용하기 편한 GenericJackso.. 이전 1 2 다음