CentOS - java.net.SocketException: Permission denied 원인과 해결 방법
·
나의 에러 일지
배경프로젝트를 서버에 배포하고 실행한 후 접속을 시도했을 때 SocketException: Permission denied 에러가 발생했다. 이 에러는 애플리케이션이 특정 포트에 바인딩하려고 할 때 권한이 없어 발생하는 문제라고 한다. 원인과 어떻게 해결할 수 있는지 확인해보자Caused by: java.net.SocketException: permission denied at sun.nio.ch.Net.bind0(Native Method) at sun.nio.ch.Net.bind(Net.java:461) at sun.nio.ch.Net.bind(Net.java:453) at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:222..
Oracle - 다중 Like (Like In)
·
SQL
기존 서비스에서 검색 기능에 대한 요구사항이 있었다.요구사항은 다음과 같다.복수 검색 가능검색 키워드를 포함하는 결과값 모두 조회ex) kim, lee, park 검색 -> 결과값: kimchanbin, leechanbin, parkchanbin, kimleepark 만약 검색어와 일치하는 결과값만 가져오면 됐다면 IN 연산자를 사용했으면 됐을텐데, 검색어를 포함하는 모든 결과값을 가져와야 했기 때문에 LIKE문을 사용해야 했다. IN 연산자SELECT NAMEFROM USERS WHERE NAME IN ('kim', 'leechan', 'parkchanbin');결과값: parkchanbin  LIKE 연산자SELECT NAMEFROM USERSWHERE NAME LIKE 'kim%'결과값: kimch..
Spring Interceptor - 인터셉터로 로그인 체크하기
·
Spring
개요 JSP로 간단한 게시판을 만들어보고 있었는데 로그인 후 접근 가능한 url로 접근할 때 로그인 여부를 체크하고 로그인하지 않았다면 로그인 화면으로 리다이렉트 시켜주는 기능이 필요했다. 그래서 이번에 알고는 있었지만 구현해본 적은 없었던 스프링 인터셉터를 사용해서 로그인 체크를 구현해보았다. 인터셉터 Spring Interceptor는 스프링 MVC에서 HTTP 요청 처리의 전, 후, 중간에 특정 작업을 수행할 수 있도록 도와주는 기능이다. 주로 요청 전에 인증, 로깅, 권한 체크 등과 같은 공통 작업을 수행하는데 많이 사용된다. 주로 Servlet Filter(필터)와 많이 비교된다. 둘 다 웹의 공토 작업을 수행하지만, 인터셉터는 Spring MVC가 제공하기 때문에, 컨트롤러 호출 전, 후, 중..
MariaDB - 행 번호 출력하기 ROW_NUMBER() OVER PARTITION BY
·
SQL
오라클에서는 RNUM()을 통해 쉽게 순번에 맞는 행 번호를 출력할 수 있었다. 이번에 JSP로 프로젝트를 진행하면서 MariaDB를 사요하게 되었고 MariaDB에서도 행 번호를 출력할 수 있는 방법에 대해 정리해본다. MariaDB에서는 ROW_NUMBER() OVER() 함수를 사용하면 된다. OVER 안에는 PARTITION BY와 OREDER BY를 사용할 수 있다. PARTITION BY : 결과 집합을 분할하는 데 사용하는 열을 지정한다. PARTITION BY를 지정하지 않으면 모든 행이 단일 그룹으로 취급된다. ORDER BY : 지정된 파티션 내에서 각 행의 고유 ROW_NUMBER가 할당되는 순서를 결정한다. 예제 SELECT ROW_NUMBER() OVER(ORDER BY name ..
JSP - Spring Boot에서 JspConfig 설정하기
·
JSP
기존 Sprin에서는 web.xml을 통해서 Jsp Config를 설정해야했다. 하지만 SpirngBoot부터는 SpringBootServletInitializer 상속 받은 클래스로 Jsp Config를 설정할 수 있다. @Configuration public class JspConfig extends SpringBootServletInitializer { @Bean public ConfigurableServletWebServerFactory configurableServletWebServerFactory() { return new TomcatServletWebServerFactory() { @Override protected void postProcessContext(Context context) {..
Eclipse Memory Analyzer - Eclipse MAT 설치 방법 (MacOS)
·
Java
배경GC 에러로 인해 서버가 다운되어서 원인을 알아보기 위해 dump 파일을 분석해볼 필요가 있었다.  Java - java.lang.OutOfMemoryError:GC overhead limit exceeded 원인실행중이던 서버가 갑자기 다운이 되었다. 로그를 살펴보니 처음보는 에러였다. 서버를 다시 재실행하니 문제없이 잘 작동하기는 했지만 해당 에러에 대해 가볍게 정리를 해보고 이후에 제대로green-bin.tistory.com본 가이드는 Eclipse MAT를 맥에 설치하고 실행하는 방법에 대해 다룬다. MAT는 자바 애플리케이션의 메모리 사용량을 분석하고 문제를 진단하는 도구이다. OutOfMemoryError와 같은 에러가 발생할 경우, 일반적인 로직 에러와는 다르기 때문에 MAT를 통해 du..
Java - OutOfMemoryError:GC overhead limit exceeded 원인과 해결 방법 (Eclipse MAT)
·
나의 에러 일지
배경실행중이던 서버가 갑자기 다운이 되었다. 로그를 확인해보니 java.lang.OutOfMemoryError: GC overhead limit exceeded 에러가 발생했다. 서버를 재기동해서 그냥 넘어가기는 했지만 다시 발생할 수 있는 문제이기 때문에 원인과 해결 방법을 정리해본다. 개발 환경Java 1.8Spring 5.3Oracle 11gMacOS 원인GC는 더 이상 참조되지 않는 객체를 제거해주는 작업을 해주기 때문에 메모리 사용을 최적화하는데 도움을 준다. 하지만 GC가 너무 오랫동안 수행되면 실제 작업보다 많은 CPU를 사용하게 되어서 프로그램 실행이 느려지거나 중단될 수 있다.OOM은 JVM이 GC를 수행하는데 너무 많은 시간을 소비해서 애플리케이션을 실행할 수 없게 되는 상황에 발생하는..
Oracle - 줄바꿈(개행) 제거
·
SQL
게시글을 작성하거나 댓글을 작성할 때 줄바꿈(개행)이 들어가는 경우가 있다. 개행이 포함된 데이터를 csv파일로 추출해야 할 일이 있었는데, 글씨가 깨져서 추출되었다. 개행을 제거해서 csv파일을 추출해야 했다. 오라클에서 개행을 제거하는 방법을 가볍게 알아보자 SELECT REPLACE(REPLACE(컬럼명, CHR(10), ''), CHR(13), '') FROM 테이블명 CHR(10) : 라인 피드라고 한다. 현재 커서가 위치한 줄에서 한 칸 아래로 이동한다. (\r) CHR(13) : 캐리지 리턴이라고 한다. 캐리지 리턴은 현재 커서가 위치한 줄의 맨 앞으로 보낸다. (\n) 눈치가 빠른 사람은 알겠지만 위 방법을 반대로 사용하면 개행을 추가해줄 수 있다. UPDATE 테이블명 SET '개행을'|..
DB - DB View에 대해서 알아보자
·
SQL
DB View DB View란 데이터베이스에서 특정한 데이터를 보여주는 가상의 테이블이나 뷰를 말한다. 실제 데이터를 저장하고 있는 테이블에서 필요한 데이터를 가져와서 논리적인 구조로 표현하는 것이다. 특정 정보를 자주 조회해야 하는 경우나 복잡한 쿼리를 View로 만들어서 간편하고 일관성 있게 조회할 수 있다. 가상 테이블: DB View는 실제 데이터를 저장하지 않고, 저장된 데이터를 기반으로 쿼리에 따라 동적으로 생성되는 가상 테이블이다. 그래서 데이터의 물리적 공간이 필요하지 않다. 데이터 추상화: DB View는 데이터베이스에 저장된 복잡한 데이터 중에서 필요한 데이터만 선택적으로 조회할 수 있다. 보안 및 접근 제어: 특정 테이블의 일부 컬럼만을 노출하거나, 데이터의 일부를 가공하여 제공함으로..
Git - 로컬 브랜치 이름 변경하기
·
Git
프로젝트를 생성했는데 기본 브랜치 이름이 master로 생성되었다. 바뀐 이유를 알고나니 master를 그대로 사용하기는 좀 그래서 main으로 변경하는 방법에 대해 찾아봤다. Github의 default 브랜치 이름은 원래 master였지만 노예제를 연상시키는 이유로 main으로 변경되었다. 로컬에서 브랜치명을 변경하는 방법은 간단하다. master 브랜치로 설정되어 있는 상태에서 아래 명령어를 치면 된다. (프로젝트 경로에서 작성하는건 기본) git branch -m main
Cold Bean
'분류 전체보기' 카테고리의 글 목록 (6 Page)