반응형

혼자 신고하면서 두 가지 알아야 할 사항이 있었다. 


표준세액공제 / 현금영수증 의무발행업종.

 

각 각 관련하여 내가 확인한 것들을 정리해보았다.


일단 나의 정보는 아래와 같다.

* 사업개시일 : 2023년 x월
* 신고안내유형 : 간편대상자-기준경비율
* 해당하는 소득 종류 : 근로소득, 프리랜서 사업소득, 개인사업자 사업소득
* 개인사업자 사업소득 매출 관련 : 전자세금계산서 발급 건만 존재
* 주업종 : 정보통신업  [코드 722000]

 

 

홈택스 들어가서 관련 정보들 입력하고 불러올 수 있는건 불러오기로 작성하였다.

 

불러 오고 자동으로 들어가 있는 금액들 중 내가 직접 수정한 것은 하나였다.

 

1. 표준세액공제 제거. 

출처 https://call.nts.go.kr/call/qna/selectQnaInfo.do?mi=1318&ctgId=CTG11912

 

 

특별소득공제등을 넣고 표준세액공제를 빼고 산출된 납부할세액이

 

특별소득공제등을 빼고 표준세액공제를 넣고 산출된 납부할세액이 나의 경우에는 적었다.

(사람마다 다름. 세액 비교 필수)

 

2. 현금영수증 의무발행업종.

 

그리고 신고서를 제출하려고 눌렀더니 가산세를 내야한다고 떳다.

 

"소득세 신고안내된 현금영수증 미가맹 또는 지연가맹하였으나
현금영수증 미가맹가산세 제출내역이 없으니 확인하십시오"

무슨의미냐면, 현금영수증 가맹 필수 업종인데 현금영수증 가맹신청을 안한 '나' .... 가산세 내야하는데

 

종합소득세 신고서 작성시 가산세에 내가 내야할 가산세 금액을 입력하지 않고 신고서 제출을 하려고한다는 의미이다.

 

그래서 찾아봤다.

 

정말 내가 내야할 가산세인것인지. 왜 의심을 했냐면, 경고라고 떳기때문에 무시해도 신고서 제출은 되는 상황이었다.

 

아래 첨부 이미지는 현금영수증 의무발행업종을 보여준다.

출처  https://www.nts.go.kr/nts/cm/cntnts/cntntsView.do?mi=2471&cntntsId=7796

 

 

이미지 출처에 접속해보면

"의무발행업종 사업자는 현금영수증가맹점에 가입하지 않은 경우에도 현금영수증 미발급에 따른 과태료 또는 가산세 부과대상에 해당"

종목 중 "컴퓨터 및 주변장치, 소프트웨어 소매업"이 포함되어 발생한 상황이다.

 

국세청 사이트를 뒤져도 내가 가산세를 물지 않아도 된다는 근거를 찾지 못하고

 

국세청과 xx세무서에 전화를 해보았는데,

 

국세청은 전자세금계산서 발행을 다했으면 상관없다고하고,

 

세무서는 현금영수증 가맹점 가입의무가 있는데 가입안했으면 무조건 가산세를 물어야한다고 했다.

 

왜 말이 다르냐고...  !!!!!

 

그러고 보니 현금영수증 가맹 관련하여 네이버 전자문서함에 온 기억이 나서 열어보니 다음과 같은 문구를 확인 할 수 있었다.

 

 

 

내 매출은 모두 전자세금계산서를 발행하는 거래 뿐이기때문에, 가산세 적용을 받진 않는다.

 

현금영수증 가맹 등록하면, 세금 감면 혜택 같은게 있다고 하는데

https://www.nts.go.kr/nts/cm/cntnts/cntntsView.do?mi=2470&cntntsId=7795

 

혹시 몰라서 가맹신청은 해놨다. (언젠간 쓸모가 있겠지)

 

무사히 신고하고 세금신고납부 완료하였다.

 

원래 내야할 세금이지만, 아깝다는 느낌은 어쩔 수 없나보다.

 

사실 어려울 것은 크게 없었지만, 가산세를 내야할지도 모른다는게 너무 스트레스였지만

 

결론적으로 안내도 되서 다행이랄까...

 

반응형
반응형

vscode에서 extension으로 설치가 안되는 오류가 있어서 직접 마켓플레이스에서 vsix로 다운받아서 로컬에서 설치하였다.

 

1. https://marketplace.visualstudio.com/

원하는 플러그인 검색후 우측 Resources부분의 Download Extension을 클릭하여 vsix파일 다운로드 후

 

 

2. vscode에서 메뉴 VIEW -> Extensions선택하면 EXTENSIONS 창이 나오는데 상단 우측 ...[Views and More Actions...]을 클릭후 Install from VSIX... 클릭

 

 

3. 마켓플레이스에서 다운받은 vsix파일을 선택하면 다운로드 된다.

반응형
반응형

이전 포스팅에선  IntelliJ에 XAMPP를 설치하여 개발환경 셋팅을 해보았다.

2023.07.20 - [개발/php] - intellij php XAMPP 개발환경 셋팅

 

이번 포스팅에서는 CodeIgniter를 IntelliJ에 셋팅을 다룬다. (서버 포트를 8080으로 변경하였음)

 


 

1. 아래 링크로 이동하여, 깃허브에서 ZIP 파일 다운로드를 받는다.

https://github.com/codeigniter4/framework

 

2. 다운로드 받은 ZIP파일을 IntelliJ 프로젝트 폴더 내에 압축을 해제해준다.

 

3. XAMPP에서 httpd.conf파일을 수정해준다.

DocumentRootDirectory랑 경로를 아래와같이 IntelliJ 프로젝트 폴더의 public 폴더까지 지정하여준다.

 

3. php.ini파일을 수정한다.

아래와같이 extension=intl 부분 앞에 있던 ;세미콜런 지우고 저장한다.

 

4. 소스에서 env파일을 .env파일로 변경해주고

 CI_ENVIRONMENTapp_baseURL 변경하고,

app.forceGlobalSecureRequests = false
app.CSPEnabled = false

부분의 주석을 아래와같이 풀어준다.

 

5. App.php파일의 $baseURL을 아래와같이 수정해준다.

 

서버를 재기동 시킨후 로컬서버를 띄워 CodeIgniter 기본 페이지가 뜨는 것을 확인한다.

반응형

'개발 > php' 카테고리의 다른 글

intellij php XAMPP 개발환경 셋팅  (0) 2023.07.20
반응형

java개발을 몇년하다가 오랜만에 php개발을 잠시(가 맞겠지...?) 시작하게되었다.

인텔리제이를 사용하고있는데, php셋팅을 하고싶어서 찾아보니 글이 별로 없어 글을 작성하게 되었다.

나름 상세하게 적었다.

 

우선 intellij는 설치되어있으니, 

 

1. XAMPP 설치를한다.

https://www.apachefriends.org/index.html

 

XAMPP Installers and Downloads for Apache Friends

What is XAMPP? XAMPP is the most popular PHP development environment XAMPP is a completely free, easy to install Apache distribution containing MariaDB, PHP, and Perl. The XAMPP open source package has been set up to be incredibly easy to install and to us

www.apachefriends.org

위 링크로 이동한 후 나는 윈도우니까 아래 빨간줄 부분 클릭 후 이동되는 페이지에서 자동으로 다운로드가 된다.

자동으로 다운로드가 되지않는다면? 아래 표시한 click here 부분 클릭!

 

다운로드된 installer를 실행하여 다 설치되었다면?

Apache와 MySQL Start를 한 후에

브라우저를 열고 127.0.0.1을 요청해본다.

위와같이 XAMPP 웰컴페이지가 떳다면 설치완료!

 

2.  intellij 플러그인 설치 및 필요 설정

File → Settings → Plugins에서 php를 검색하여 install을 한다. 설치후 intellij를 restart한다.

php프로젝트를 새로 생성하기 위해

File →  New → Project...를 클릭

 

File → Settings → Languages & Frameworks → PHP →  CLI Interpreter 부분 [...] 클릭

PHP → PHP Empty Project를 선택 후 Next클릭

Projcet name과 location을 입력하고 Finish를 클릭한다. 그럼 새 Project로 생성되어 php프로젝트가 열린다.

PHP executable부분에 php설치 경로를 찾아 php.exe파일을 선택하고 Apply 후 OK

File → Settings → Languages & Frameworks → PHP →  Servers  →  [+] 클릭후 →  Project files에 현재 인텔리제이 작업할 프로젝트 경로로 설정 후 OK

기본경로로 설정되어있으므로 인텔리제이에서 작업할 프로젝트경로를 httpd.conf에도 변경해주자

아래와같이 XAMPP 에서  Apache의 Config를 클릭하면 여러 파일을 선택할 수 있는데 이 중 Apache(httpd.conf)를 클릭한다.

인텔리제이의 프로젝트 경로를 아래와같이  입력하고 저장한 후

 XAMPP 컨트롤 창을 열어 Apache부분을 Stop한 후 Start를 해준다.

index.php를 생성하여 아래와같이 테스트 코드를 작성하고 다시 로컬주소를 브라우저에 입력하면

php intellij 연동 끝!

 

 

더 필요한 플러그인이 있다면 사용해보면서 찾아보고 설치할 예정이다. (혹시 댓글로 알려주시면 감사하겠습니다.)

 

또한 다음 포스팅은 코드이그나이터를 연동하고 추후 smarty까지 맛볼 예정이다.

반응형

'개발 > php' 카테고리의 다른 글

IntelliJ CodeIgniter4.3.6 셋팅하기  (0) 2023.07.27
반응형

상황에 따라서 오류라고 볼 수도있고 아닐수도있다.

 

centos7 에서 root권한을 부여한 새 계정을 발급해달라는 요청이 왔다.

 

일반사용자로 로그인 한 후 su 명령어로 root권한이 부여한 계정을 사용하도록 2개의 계정을 생성하기로 하였다.

(해당 작업은 root계정으로)

useradd nuser
passwd nuser

nuser = 일반사용자

useradd ruser
passwd ruser

ruser = root권한사용자

 

ruser 계정을 생성한 후에 vi /etc/passwd으로 열어서

 

ruser:x:0:0::/home/ruser:/bin/bash

 

이렇게 0으로 변경해주고

 

 

vi /etc/group을 열어서

 

root:x:0:ruser

 

으로 변경해줬다.

 

그리고 나서  새 세션으로 일반사용자(nuser)로 로그인 후 

 

su ruser

 

명령어로 root권한 사용자로 su 명령어를 날리면

 

su : 권한 부여 거부

 

요렇게 떳다..

 

이 이유는 nuser가 root권한 계정으로 전환하는 권한이 부여되있지 않기 때문이다.

 

다시한번 .... 

 

vi /etc/group을 열고 아래와같이 wheel에 root권한 부여된 계정으로 전환할 일반 사용자 계정을 아래와같이 추가 후 저장

 

wheel:x:10:root,nuser

 

다시 접속해서 su명령어시 오류 없이 전환된다

반응형
반응형

 

이번엔 http code가 노출된다는 취약점 결과가 날라왔다. 

 

이전에 http code노출 막는 포스팅을 한 적이 있는데, 이와 다른 경우가 발생하였다.

2022.12.08 - [개발/취약점] - http 400 505 error code 노출 막기

 

http 400 505 error code 노출 막기

400 505번 http error code 출력되는 취약점 발생했다. 톰캣/conf/web.xml에 400 /error.html 401 /error.html 403 /error.html 404 /error.html 405 /error.html 500 /error.html 501 /error.html 정의를 하고 server.xml파일의 docBase에 error.htm

lsdev.tistory.com

1. web.xml에 error code별 html을 설정해줘도 안되서

 

2. server.xml설정을 해준 바 있다.(톰캣 8.5.82를 사용하고 있음)

 

분명히 http code와 tomcat 정보가 노출되지 않도록 설정을 했고 웹사이트에서 확인을 하였다.

 

(취약점을 내가 적용하기 전에 진단했나? 하며 확인해봤더니 날짜가 그렇지 않음을 확인... 주절주절)

 

curl --location --request GE@T 'https://url정보입력:포트'

터미널에서 이렇게 날려보니(GE@T :일부러 잘못된 요청을 해봄. 내가 위에 첨부한 이미지처럼 400이 발생하도록)

 

어? 그런데

취약점 보고서에 나온 내용대로 동일하게 위와 같이 오류가 나온다!

 

톰캣 access로그를 확인해보니 해당 요청(curl --location --request GE@T 'https://url정보입력:포트')에 대해선

 

로그가 안찍힌다. 들어오지 못하는걸까?

 

WAS로 가기전에 우리는 웹서버를 사용하지 않고 먼저, Haproxy에서 WAS로 로드밸런싱을 해준다.

 

Haproxy 설정에 대해서 찾아보니 HAProxy 구성 파일(haproxy.cfg)에 별도의 오류 페이지 설정이 없는 경우,

 

기본적으로 HAProxy는 내장된 오류 페이지를 사용한다고한다.

 

기본 오류 페이지에는 http code가 들어있기때문에, 각 코드별 파일을 아래와같이 수정하였다.

 

<html><body><h1>잘못된 접근입니다.</h1> Error Page </body></html>

 

또한, vi /etc/haproxy/haproxy.cfg 파일에서 443요청에 대해 아래와 같이 설정을 추가하였다.

errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http

 

혹시 error code별 http코드가 보이지 않는다면 find / -name *.http로 haproxy의 error code http를 찾아서 위의 디렉토리에 cp하자.

 

여기까지 끝났다면 

 

systemctl restart haproxy  명령어를 날려주고

 

아까와 같이 curl 날려주면 아래와 같이 내가 만든 ERROR PAGE가 나오는 것을 확인할 수 있다.

 

우리는 apache를 별도로 web server를 사용하지 않고 haproxy를 사용하기에 이와같은 순서가 됬지만,

 

혹시 동일한 취약점의 경우인데 haproxy가 아니라면 사용하고있는 web server의 설정을 알아보고 설정하자.

 

반응형
반응형
마운트란, 파일 시스템을 사용하기 위해 디스크나 외부 저장장치를 특정 디렉토리에 연결하는 것을 말한다.

 

 

이를 통해 해당 디렉토리를 통해 저장 장치에 접근할 수 있다.

 

마운트할 때는 디스크를 마운트하는 것이 아니라, 파일 시스템을 마운트한다.(디스크에하는 줄)

 

파일 시스템은 여러 가지 타입이 있을 수 있으며,

 

이러한 파일 시스템들은 각각의 파일과 디렉토리를 어떻게 저장할지 결정한다.

 

마운트할 때는 해당 파일 시스템의 타입을 명시하고, 파일 시스템을 마운트할 마운트 포인트(디렉토리)를 지정한다.

 

윈도우 : 자동 인식
  • 윈도우에서는 새로운 저장 장치(USB 포함)를 연결하면 자동으로 해당 드라이브에 대한 마운트가 수행
  • 해당 드라이브의 파일 및 디렉토리에 쉽게 접근가능해짐
리눅스 : 수동 설정 필요

 


아래는 chat gpt와 나눈 대화이다. (각 각 리눅스와 윈도우)

 

Q. 만약에 내가 리눅스 서버에 새로 ssd를 추가했어. 그럼 처음부터 끝까지 어떤 과정을 거쳐야 사용할 수 있는지 자세하게 설명좀

A. 새로운 SSD를 추가해서 사용하려면 다음과 같은 과정이 필요합니다.

  1. 파티션 생성: 새로운 SSD를 사용하기 위해서는 먼저 파티션을 생성해야 합니다. 이 단계에서는 새로운 SSD에 대한 파티션을 생성하는 작업을 수행합니다. 파티션은 디스크의 논리적인 구획으로서, 디스크를 여러 개의 영역으로 나누어서 사용할 수 있도록 합니다.
  2. 파일 시스템 생성: 파티션을 생성한 후에는 해당 파티션에 파일 시스템을 생성해야 합니다. 파일 시스템은 운영체제에서 파일을 저장하고 관리하기 위한 방식을 의미합니다. 이 단계에서는 새로운 파티션에 대해 파일 시스템을 생성합니다.
  3. 마운트: 파일 시스템을 생성한 후에는 해당 파일 시스템을 마운트해야 합니다. 마운트는 파일 시스템을 운영체제의 디렉토리 구조에 연결하는 작업을 의미합니다. 이 단계에서는 생성된 파일 시스템을 운영체제의 디렉토리 구조에 연결하고, 해당 디렉토리를 통해 새로운 SSD에 접근할 수 있도록 설정합니다.
  4. 부팅 시 자동 마운트 설정: 위의 과정을 모두 마쳤다면 새로운 SSD를 사용할 수 있습니다. 그러나 매번 시스템을 부팅할 때마다 해당 SSD를 수동으로 마운트해야 한다면 번거로울 것입니다. 따라서, 부팅 시 자동으로 마운트 설정을 해주는 것이 좋습니다. 이를 위해서는 /etc/fstab 파일을 수정하여 자동 마운트 설정을 추가해주면 됩니다.

위의 과정을 통해, 새로운 SSD를 사용할 수 있게 됩니다.

 

Q. 그럼 윈도우는 디스크를 추가하면 어떻게 파일시스템을 생성해?

A. 윈도우에서 디스크를 추가하면, 해당 디스크에 파일 시스템을 생성하기 위해 다음과 같은 과정을 거칩니다.

  1. 디스크 관리 유틸리티 실행: 윈도우 운영체제에서는 "디스크 관리"라는 유틸리티를 이용하여 새로운 디스크를 사용할 수 있도록 준비합니다. 이 유틸리티는 "관리 도구" 폴더 안에 있습니다.
  2. 디스크 초기화: 디스크 관리 유틸리티에서 새로 추가한 디스크를 선택하고, 초기화 작업을 수행합니다. 초기화 작업은 디스크에 대한 파티션 정보를 생성하고, 파일 시스템을 준비합니다.
  3. 파티션 생성: 디스크를 초기화한 후, "새로운 단위 생성" 기능을 사용하여 디스크에 파티션을 생성합니다. 이 과정에서 파티션의 크기와 유형을 선택합니다.
  4. 파일 시스템 생성: 파티션을 생성한 후, 해당 파티션에 파일 시스템을 생성합니다. 이 때 NTFS 또는 FAT32와 같은 파일 시스템을 선택할 수 있습니다.
  5. 드라이브 문자 할당: 파일 시스템을 생성한 후, 해당 파티션에 할당된 드라이브 문자를 지정합니다. 이 때, 사용자가 지정한 드라이브 문자를 사용하거나, 시스템에서 자동으로 드라이브 문자를 할당할 수 있습니다.
  6. 마운트: 마지막으로, 윈도우 운영체제에서 해당 파티션을 마운트합니다. 이렇게 하면 파일 시스템이 해당 드라이브 문자에 연결되어 사용할 수 있게 됩니다.

 

마운트를 디스크를 사용하기 위한 정도로만 알고 있었는데,

 

마운트에 대해 gpt와 대화하다보니 디스크추가시 일련 과정을 알 수 있었다.

반응형
반응형

처음 thymeleaf를 사용해서 프로젝트를 작업하면서 정리해봤다. 생각나는게 있으면 추가해야지!

 

Thymeleaf data 속성 사용법(1개)
th:attr="data-userid=${변수명}"
Thymeleaf data 속성 사용법(2개 이상)
th:attr="data-userid=${변수명}, data-usernm=${변수명}"

콤마로 연결!

참고로 대문자를 사용하면(data-userId 혹은 userNm)

$(obj).data(”userId”)로 값을 가져오지 못하므로 소문자사용함.

 

Thymeleaf class추가하기 : classappend
th:classappend="${조건} ? '참인경우append할 클래스명':''"

 

Thymeleaf select option selected(예시 : 검색)
<select th:field="${searchData.searchType}">
	<option th:value="title" th:selected="${searchData.searchType} == 'title'">
	...
</select>

 

Thymeleaf radio checked
<input type="radio" name="gender" value="f" th:checked="${gender eq 'f'}">여성
<input type="radio" name="gender" value="m" th:checked="${gender eq 'm'}">남성

 

Thymeleaf checkbox checked
<input type="checkbox" th:checked="${xxxYn} eq 'Y'" name="xxxYn" /> 

 

Thymeleaf List(예시 : resultList)형태 foreach
<tr th:each="resultRow,idx : ${resultList}">
	<th th:text="${idx.count}"></th>
	<td th:text="${resultRow.title}"></td>
</tr>

 

Thymeleaf Map(예시 : resultMap)형태 foreach
<ul class="tree-group" th:each="entry, ii: ${reulstMap}">
	<li th:text="${entry.key}"></li> <!-- key 출력 -->
	<li th:text="${entry.value}"></li> <!-- value 출력 -->
</ul>

 

Thymeleaf onclick 변수 사용방법
th:onclick="'fn_paging('+${pagination.startPageNum}+');'"

 

Thymeleaf split(예시 : / 으로 잘라서 0번째 값 가져오기)
th:text="${#strings.arraySplit(변수, '/')[0]}"

 

Thymeleaf java LocalDateTime을 원하는 날짜형식으로 변환
<td th:text="${#temporals.format(regDate, 'yyyy-MM-dd HH:mm:ss')}"></td>
반응형

+ Recent posts