2018년 7월 29일 일요일

공통코드란? 코드 테이블 설계와 SQL 조회 예제

공통코드는 여러 화면과 테이블에서 사용하는 분류값을 코드와 표시 이름으로 나누어 관리하는 방법입니다. 예를 들어 게시판에는 B01을 저장하고, 화면에는 ‘일반게시판’을 표시합니다. 이 글에서는 게시판 종류와 회원 역할을 구분하는 작은 코드 테이블을 직접 만들어 봅니다.

2018년의 학습 메모를 2026년 10월 16일에 예제 중심으로 보완했습니다. 아래 구조는 설계 예시이며 모든 시스템에 적용해야 하는 표준은 아닙니다.

코드와 이름을 왜 나눌까?

게시글마다 ‘일반게시판’이라는 이름을 저장하면 명칭을 변경할 때 여러 데이터를 수정해야 할 수 있습니다. 코드와 이름을 분리하면 게시글의 분류값을 유지하면서 표시 이름을 관리할 수 있습니다. 다만 과거 화면의 명칭까지 보존해야 하는 서비스라면 별도의 이력 설계가 필요합니다.

그룹도 구분합니다. BOARD_TYPE은 게시판 종류, USER_ROLE은 회원 역할입니다. 코드만으로 찾지 않고 그룹과 코드를 함께 사용하면 서로 다른 분류의 값이 섞이는 실수를 줄일 수 있습니다.

테이블을 만들고 게시판 종류 조회하기

아래 예제는 빈 테스트 데이터베이스에서 실행하세요. Python의 SQLite 메모리 데이터베이스에서 생성·조회 및 중복 키 거부를 확인했습니다. MySQL·Oracle 실서버에서 실행한 결과는 아닙니다.

CREATE TABLE common_code (
    code_group VARCHAR(30) NOT NULL,
    code VARCHAR(20) NOT NULL,
    code_name VARCHAR(100) NOT NULL,
    sort_order INTEGER NOT NULL,
    active CHAR(1) NOT NULL,
    PRIMARY KEY (code_group, code)
);
INSERT INTO common_code VALUES
('BOARD_TYPE', 'B01', '일반게시판', 1, 'Y'),
('BOARD_TYPE', 'B02', '질문게시판', 2, 'Y'),
('BOARD_TYPE', 'B03', '사진게시판', 3, 'Y'),
('USER_ROLE', 'U01', '일반회원', 1, 'Y'),
('USER_ROLE', 'U09', '관리자', 2, 'Y');
SELECT code, code_name
FROM common_code
WHERE code_group = 'BOARD_TYPE' AND active = 'Y'
ORDER BY sort_order, code;

조회 결과:

B01 | 일반게시판
B02 | 질문게시판
B03 | 사진게시판

복합 기본 키는 같은 그룹 안의 코드 중복을 막습니다. sort_order는 화면 정렬 순서, active는 신규 선택 가능 여부를 표현하는 예시입니다. 이 테이블을 만든 것만으로 다른 업무 테이블의 코드값까지 검증되지는 않습니다. 참조 관계와 그룹 제약을 별도로 설계해야 합니다.

운영 전에 정할 네 가지 규칙

  1. 의미가 바뀌면 코드를 재사용하지 않기. 기존 데이터의 해석이 달라지지 않도록 새 코드를 검토합니다.
  2. 사용 중인 코드는 삭제보다 비활성화 검토. 신규 입력에서 숨겨도 과거 데이터의 이름은 조회할 수 있어야 합니다.
  3. 수정 권한과 변경 기록 정하기. 누가 이름·순서·활성 상태를 바꿨는지 추적합니다.
  4. 캐시 갱신 시점 정하기. 관리 화면에서 고친 이름이 서비스에 언제 반영될지 명확히 합니다.

회원 역할 코드를 저장하는 것과 접근 권한을 검사하는 것은 별개입니다. 클라이언트가 보낸 U09 값을 믿고 관리자 권한을 부여하면 안 됩니다.

공통코드 테이블과 enum 중 무엇을 쓸까?

배포 없이 운영자가 표시 이름이나 선택 항목을 관리해야 한다면 코드 테이블을 고려할 수 있습니다. 값이 프로그램의 분기와 강하게 연결되고 코드 변경과 함께 검토되어야 한다면 enum이 더 단순할 수 있습니다. 모든 상태값을 한 테이블에 몰아넣기보다 변경 주체와 참조 규칙을 먼저 정하는 편이 좋습니다.

2018년 7월 8일 일요일

Cot_pr1 개선하기 (진행 중) - LastUpdated 10/02

포트폴리오용 커뮤니티 웹페이지를 개선시키려고한다.
전에 존재하던 저장소가 gitignore 설정테스트하다가 커밋들이 꼬여서 너무 더러워졌다..
소스트리 사용해서 편하게 하려다가 망함 ㅠㅠㅠ

>>새로 프로젝트 생성해서 처음부터 ignore, branch 등 설정 제대로 해서 만들어보기!
-- 7/8 생성 완료


1. 오류페이지 생성 --- 7/15 완료
(403, 404, 405, 500에러시 이동하는 페이지 생성
web.xml에
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  <!-- 에러 페이지 -->
  <error-page>
      <error-code>403</error-code>
      <location>/error/403</location>
  </error-page>
  <error-page>
      <error-code>404</error-code>
      <location>/error/404</location>
  </error-page>
    <error-page>
      <error-code>405</error-code>
      <location>/error/405</location>
  </error-page>
  <error-page>
      <error-code>500</error-code>
      <location>/error/500</location>
  </error-page>
cs
형태로 설정하여 에러코드 발생 시 error 컨트롤러로 이동하게 수정

403 - 권한 부족
404 - 페이지를 찾을 수 없음
405 - 잘못된 요청방식
(예를 들어 POST 방식으로 요청을 받는 서버에 GET 요청을 보내는 경우, 또는 읽기 전용 리소스에 PUT 요청을 보내는 경우)
500 - 서버 에러
)

2. 회원가입/ 로그인(연동추가) ++ 회원 전체적인 부분 다시 개선(회원정보,권한,로그인유지 등)

3. 도메인

4. ajax부분 다시 

5. xss필터

6. 공통코드로 관리할 것(권한, 게시판구분 등 ) ---  8/12 진행 중
----------7/29
-code테이블 생성
게시물, 회원코드로 관리할 것
(공통 코드란??)

코드로 관리하여 게시판 및 컨트롤러 통합해도 될듯

++++++8/12
현재형태: 각 게시판마다 글쓰기, 수정, 뷰, 댓글, 등 다 따로 있음.
일단 기존 것 그대로 나두고, 새로운 틀 생성해서 진행하기
>>
테이블들 코드로 관리하고, 게시판형태 하나로 통합해서 body만 각 게시판에
맞게 바꾸기 + 게시물 리스트, 페이징 처리할 때 ajax 써보기
>>NoN빨리 마무리하고 진행하기


7. service / dao / controller 수정(인터페이스만들기)


8. 스프링시큐리티 수정
(++관리자 로그인 후 관리자 페이지 이동 시 비밀번호 입력(의미없음 - 수정 필요)



9. 로그출력 추가 --- 10/02 완료
logback 으로 간단한 로그 남기는 것  추가함.
(로그 남기기)



10. 트랜잭션 설정하기



11. +++계속 추가

(NoN 플젝에 엑셀파일 읽는 것을 스케줄러로 처리하면좋을듯?) 

2018년 7월 1일 일요일

리눅스 기본 명령어

cp file1 file2 : 파일1을 파일2로 복사하기

ls : 디렉토리와 파일정보 표시
<옵션>
    -l 파일에 대한 정보(파일 허용권, 소유자, 그룹, 크기, 날짜)를 긴 형식으로 보여줍니다.
    -a 는 모든 파일을 지정합니다(디렉토리의 히든 파일도 보여줍니다).
    -i 파일의 'inode'도 같이 보여줍니다.
    -t 최종 수정된 시간별로 정렬합니다.
    -r 파일을 역순, 즉 내림차순으로 배열합니다.
    -u 변경되지 않았더라도 최근에 엑세스했던 파일들을 보여준다. 이 t나 u옵션으로 최근          에 다루었던 파일을 찾는데 유용하게 쓸 수 있습니다.
    -F 파일의 특성을 보여줍니다. 이름 뒤에 디렉토리면 /를 실행파일이면 *, 심블릭 링크된           파일이면 @를 붙여줍니다.
    -R 하위 디렉토리의 파일도 모두 보여줍니다.
    -C 컬럼별로 파일을 보여줍니다.
    -w 컬럼수로 가로의 크기를 설정합니다.
    -m 가로로 간단히 출력합니다.
    -- color=yes 서브디렉토리를 구별하기 위해 color로 보여집니다.
    
리눅스의 명령어에서 이런 옵션들은 대개 여러 개를 같이 써 줄 수 있다.    
ex) -a -l은 -al과 같이 쓸 수 있습니다..
      ls -art는 현재 디렉토리에서 파일이 최종 수정된 시간의 내림차순으로 정렬된 모든 파일의 이름을 나열합니다. 따라서 가장 최근파일이 맨 아래에 표시됩니다.






cd :디렉토리를 변경


 cd ABC    : 하부 디렉토리인 ABC으로 들어감.
 cd  ..             : 상위디렉토리로 이동
 cd 또는 cd ~  : 어느곳에서든지 자기 홈디렉토리로 바로 이동
 cd /webker     : 현재 작업중인 디렉토리의 하위나 상위 디렉토리가
                          아닌 다른 디렉토리(webker)로 이동하려면 /로
                          시작해서 경로이름을 입력하면 된다.








http://nuninaya.tistory.com/158


https://www.mireene.com/webimg/linux_tip1.htm