전체 글 48

setcap을 이용한 Apache(아파치) 기동 권한 설정

1. setcap이란?setcap은 Linux에서 실행 파일에 특정한 **Capabilities(권한)**을 부여하는 명령어입니다. 일반적으로 1024 이하의 포트(Well-known Ports)는 root 권한이 있는 프로세스만 바인딩 가능하지만, setcap을 이용하면 루트 권한 없이도 특정 실행 파일이 이러한 포트를 사용할 수 있습니다.Apache 웹 서버(httpd)는 기본적으로 80번(HTTP), 443번(HTTPS) 포트에서 실행되기 때문에 일반 사용자로 실행할 경우 포트 바인딩에 실패합니다. 이를 해결하기 위해 보통 Apache는 root 권한으로 실행되었다가, 이후 일반 사용자(apache, www-data 등)로 변경됩니다. 하지만 보안상 root로 실행하는 것은 위험할 수 있기 때문에 ..

WEB_WAS/APACHE 2025.03.17

1. Strategy 패턴

Strategy 패턴이란?Strategy 패턴은 동일한 문제를 해결하는 여러 알고리즘이 있을 때, 이들을 독립된 클래스로 캡슐화하고 런타임에 알고리즘을 교체할 수 있도록 하는 설계 패턴입니다. 이 패턴은 코드 중복을 줄이고 확장성을 높이는 데 매우 유용합니다. 예를 들어, 결제 시스템을 설계한다고 가정해봅시다. 결제 방식은 신용카드, PayPal, 혹은 기타 방식으로 다양할 수 있습니다. 각 결제 방식을 동적으로 변경할 수 있다면 사용자의 요구에 더 잘 대응할 수 있습니다. 하지만 잘못된 설계로 인해 유지보수와 확장성이 떨어질 위험이 있습니다. 다음은 잘못된 설계와 그 문제점을 살펴보고, 이를 Strategy 패턴으로 해결하는 과정을 소개합니다. 이 글의 소스코드 및 설명은 헤드퍼스트 디자인패턴 책을 참..

Java 직렬화와 NotSerializableException 문제

1. 들어가며Java 개발을 하다 보면 직렬화(Serialization)는 네트워크 통신, 파일 저장, 캐시 관리와 같은 작업에서 중요한 역할을 합니다. 그러나 직렬화 과정에서 **NotSerializableException**과 같은 예외를 만날 수 있습니다. 특히, HttpSession 또는 세션에서 가져온 데이터를 사용하는 객체를 직렬화할 때 문제가 자주 발생합니다.이 글에서는 세션에서 데이터를 가져와 사용하는 객체에서 발생한 직렬화 이슈를 중심으로 원인과 해결 방법을 소개합니다. 2. 문제 상황아래는 세션에서 데이터를 가져와 사용하는 객체를 직렬화하려다 발생한 예외 상황입니다.Object obj = this.request.getSession().getAttribute("vis"); 위 코드에서 v..

Java로 TCP 프록시 서버 구현하기 - 라운드 로빈 로드밸런싱을 활용한 백엔드 서버 연결

소개멀티스레드 환경에서 다수의 TCP 요청을 처리하고, 이를 백엔드 서버로 효율적으로 분배하는 TCP 프록시 서버를 구축하는 방법을 소개합니다. 이 프로젝트는 Java의 강력한 네트워크 라이브러리와 라운드 로빈 로드밸런싱 알고리즘을 활용해 간단하고 효율적인 로드밸런싱을 구현합니다. 1. 프로젝트 개요목표TCP 요청을 처리하는 프록시 서버를 구축.백엔드 서버 그룹으로 요청을 분배.라운드 로빈 알고리즘을 통해 요청을 균등하게 분배.멀티스레드를 활용해 여러 클라이언트 요청을 동시에 처리.구성클라이언트: TCP 요청을 보냄.프록시 서버: TCP 요청을 수신하고 백엔드 서버로 전달.백엔드 서버 그룹: 요청을 처리하고 결과를 반환.2. 라운드 로빈 로드밸런싱로드밸런싱이란?로드밸런싱은 다수의 서버에 작업을 균등하게 ..

디자인 패턴

안녕하세요. 오랜만에 블로그 글을 씁니다. 이번에는 디자인 패턴에 대해 공부하고 기록해보려 합니다.디자인 패턴이란?디자인 패턴은 소프트웨어 설계에서 반복적으로 나타나는 문제를 해결하기 위한 검증된 설계 방법입니다. 이는 코드를 효율적이고 체계적으로 작성하도록 돕는 일종의 "모범 답안"이라고 할 수 있습니다.디자인 패턴이 왜 필요한가?문제 해결의 기준 제공: 반복되는 문제에 대해 검증된 해결책을 제공합니다.코드의 가독성과 재사용성 향상: 유지보수하기 쉽고 확장 가능한 코드를 작성할 수 있습니다.개발자 간 의사소통 강화: 공통된 용어와 설계를 통해 팀 간 협업이 원활해집니다.디자인 패턴은 어디에 활용되는가?디자인 패턴은 다음과 같은 상황에서 유용합니다:객체 생성이 복잡하거나 관리가 필요한 경우 (예: Sin..

4-6. 리눅스 사용자 및 권한 관리 - 사용자 그룹 관리

1. 그룹 생성 - groupadd 새로운 그룹을 생성하려면 groupadd 명령어를 사용한다. #sudo groupadd 2. 그룹에 사용자 추가 # sudo usermod -aG 추가된 그룹에 사용자가 추가된걸 확인 할 수 있다. 3. 그룹 삭제 - groupdel 그룹을 삭제하려면 groupdel 명령어를 사용한다. sudo groupdel 정상적으로 그룹이 삭제 된걸 확인 할 수있다. 리눅스에서 그룹은 파일 및 디렉토리 접근 권한을 관리하고 사용자를 논리적으로 그룹화하는 데 사용함으로 관리하는 법을 익히는게 필수라고 볼 수 있다.

4-5. 리눅스 사용자 및 권한 관리 - 사용자 계정 수정 / 삭제

1. 사용자 계정 수정 - usermod # usermod [option] [option] -u [uid]: 사용자 ID 번호 -o: UID를 중복하여 계정 수정 -g [group-name]: 사용자 기본 그룹명 또는 그룹번호(GID) -G group-list: 추가 그룹들의 이름과 번호 목록으로 각 그룹은 콤마로 구분 -d home-dir: 기본 홈 디렉토리 대신 사용될 홈 디렉토리 지정 -s : 로그인 쉘, (디폴트 /bin/sh) -c comment : 사용자에 대한 설명 -l new_name : 새로운 이름으로 수정 -f days : 암호가 만료된 후 계정이 만료될 때까지의 날짜 수 (0:비활성화, 1:활성화) -e date : 계정 만료기한 YYYY-MM-DD 날짜 형식으로 지정 -p passw..

4-4. 리눅스 사용자 및 권한 관리 사용자 생성 명령어

1. useradd 사용자 생성은 간단하게 다음과 같이 생성할 수 있다. # useradd 아무런 옵션 없이 사용자를 생성 하였을 경우 기본 옵션이 적용된다. 기본 옵션 내용은 useradd -D 명령을 이용 하여 확인 할 수 있다. 시스템이 설정해준 기본 옵션이 맘에 안들거나 자신의 환경과 맞지 않아 수정할 수도 있다. 수정할 수 있는 내용은 그룹, 홈 디렉토리, 쉘, 계정, 만료일등이 있다. [option] -u [uid]: 사용자ID 번호, 500이상의 유일한 숫자 -o: UID를 중복하여 계정 생성 가능 -g [group-name]: 사용자 기본 그룹명 또는 그룹번호(GID) -G group-list: 추가 그룹들의 이름과 번호 목록으로 각 그룹은 콤마로 구분 -d home-dir: 기본 홈 디렉..

리눅스 skel 디렉토리 란

skel 디렉토리는 새로운 사용자 계정을 생성할 때 기본적으로 복사되는 초기 설정 파일이나 디렉토리를 담고 있는 디렉토리입니다. "skel"은 "skeleton"의 약어로, 사용자의 초기 환경을 형성하는 데 사용됩니다. 새로운 사용자 계정을 생성할 때, 시스템은 skel 디렉토리 내의 파일과 디렉토리를 기반으로 사용자의 홈 디렉토리에 초기 설정을 생성합니다. 이렇게 함으로써 모든 사용자가 공통된 초기 설정을 가지며, 이는 환경을 일관성 있게 유지하고 개인 사용자가 추가 설정을 할 수 있도록 하는 데 도움을 줍니다. 일반적으로 skel 디렉토리는 /etc/skel 경로에 위치하며, 사용자 계정을 생성할 때 시스템이 이 디렉토리의 내용을 참조하여 초기 환경을 설정합니다. 사용자 계정의 .bashrc, .pr..

4-3. 리눅스 사용자 및 권한 관리 Special Permission

리눅스 파일 권한: setuid, setgid, sticky bits 리눅스 파일 시스템은 파일의 보안과 권한을 관리하기 위해 다양한 기능을 제공한다. 그 중에서도 setuid, setgid, 그리고 스티키 비트는 특별한 권한 설정을 제공하여 보다 정교한 권한 관리를 가능하게 한다. 1. Setuid와 Setgid Setuid (s 권한): setuid는 실행 파일에 설정할 수 있는 권한 중 하나로, 실행 파일이 특정 사용자의 권한으로 실행되도록 한다. 이를 통해 특정 사용자만이 파일에 대한 접근 권한이 있는 작업을 수행할 수 있게 한다. Setgid (s 권한): setgid는 디렉토리에 설정할 수 있는 권한 중 하나로, 새로운 파일이 해당 디렉토리에 생성될 때 그 파일의 그룹을 디렉토리의 그룹으로 설..