큰뼈대만 기록해둡니다.


파일입출력의 핵심은 DB에는 파일이 저장된 경로와 저장되었을때의 파일명과 원본 파일명을 기록해 두는것이다.

그리고 출력시에 ViewResolver의 순서를 InternalResourceViewResolver가 먼저가 아닌 BeanNameViewResolver의 순서를 우위에 두게 해서 빈객체 @Component("FileDownloadView")가 View객체로 사용되게 하는 것이다.


pom.xml

<!-- MultipartHttpServletRequset -->

<dependency>

    <groupId>commons-io</groupId>

    <artifactId>commons-io</artifactId>

    <version>2.0.1</version>

</dependency>

 

<dependency>

    <groupId>commons-fileupload</groupId>

    <artifactId>commons-fileupload</artifactId>

    <version>1.2.2</version>

</dependency>



MultipartHttpServletRequert를 실행하기 위해서 commons-io와 commons-fileupload를 maven에 추가합니다.



root-context.xml

<!-- File io -->

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

       <property name="maxUploadSize" value="100000000" />

       <property name="maxInMemorySize" value="100000000" />

</bean>



그리고 root-context에는 최대upload사이즈와  최대 메모리 사이즈를 지정해줍니다.



upLoad

@Component("AppUtils")

public class AppUtils {


private static final String filePath = "C:\\path";

    

    public List<Map<String,Object>> parseInsertFileInfo(Map<String,Object> map, HttpServletRequest request) throws Exception{

   

    MultipartHttpServletRequest multipartHttpServletRequest = (MultipartHttpServletRequest)request;

        Iterator<String> iterator = multipartHttpServletRequest.getFileNames();

       

        MultipartFile multipartFile = null;

        String originalFileName = null;

        String originalFileExtension = null;

        String storedFileName = null;

         

        List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();

        Map<String, Object> listMap = null;

         

        String boardIdx = (String)map.get("IDX");

         

        File file = new File(filePath);

        

        if(file.exists() == false){

            file.mkdirs();

        }

         

        while(iterator.hasNext()){

           

        multipartFile = multipartHttpServletRequest.getFile(iterator.next());

            

        if(multipartFile.isEmpty() == false){

                

        originalFileName = multipartFile.getOriginalFilename();

                originalFileExtension = originalFileName.substring(originalFileName.lastIndexOf("."));

                 

                Date dt = new Date();

                SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddhhmmss");

                

                storedFileName = originalFileName + String.format("(%s)", sdf.format(dt)) + originalFileExtension;

                

                file = new File(filePath + storedFileName);

                

                //File transfer

                multipartFile.transferTo(file);

                 

                listMap = new HashMap<String,Object>();

                

                listMap.put("BOARD_IDX", boardIdx);

                listMap.put("ORIGINAL_FILE_NAME", originalFileName);

                listMap.put("STORED_FILE_NAME", storedFileName);

                listMap.put("FILE_SIZE", multipartFile.getSize());

                

                list.add(listMap);

            }

        }

        return list;

   

    }

   }




downLoad

 @RequestMapping(value="/board_detail/download", method = RequestMethod.GET)
     public ModelAndView downloadFile(@RequestParam("path") String FileName) throws Exception{
             
             String path = "C://dev//file";
             String FileFullPath = path + "//" + FileName;        
             java.io.File file = new java.io.File(FileFullPath);
      
             return new ModelAndView("FileDownloadView", "downloadFile", file );
     }


@Component("FileDownloadView")
public class FileDownloadView extends AbstractView {
   
    public FileDownloadView() {
        // TODO Auto-generated constructor stub
    }
   
    @Override
    protected void renderMergedOutputModel(Map<String, Object> map, HttpServletRequest req,
                                                                                                 HttpServletResponse res) throws Exception {
        // TODO Auto-generated method stub
       

try {
            File file = (File)map.get("downloadFile");
           
            res.setContentType(getContentType());
            res.setContentLength((int) file.length());
            res.setHeader("Content-Disposition", "attachment; filename=\""
                                                             + java.net.URLEncoder.encode(file.getName(), "utf-8") + "\";");
            res.setHeader("Content-Transfer-Encoding", "binary");
           
            OutputStream out = res.getOutputStream();
            FileInputStream fis = null;
           
            fis = new FileInputStream(file);
            FileCopyUtils.copy(fis, out);
           
            fis.close();
            out.flush();
           
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }
   
}



'Programming > Spring' 카테고리의 다른 글

root-context & servlet-context  (0) 2018.02.14
ModelAndView 와 ViewResolver  (0) 2018.02.14
MariaDB Auto_Increment  (0) 2018.02.08
DAO, DTO, VO  (0) 2018.02.08
@Autowired, @Resource, @Inject  (0) 2018.02.05


CREATE TABLE POST
(
    ID VARCHAR(30),
    NO_POST INT AUTO_INCREMENT,
    TITLE VARCHAR(100) NOT NULL,
    CONTENTS VARCHAR(4000) NOT NULL,
   
    PRIMARY KEY (CD_POST, ID)
);


AUTO_INCREMENT로 정의된 컬럼은 PK여야한다.
앞쪽에 나와야된다. 아니면 에러뜨더라...


Auto_increment 초기화 :

ALTER TABLE 테이블명 AUTO_INCREMENT = 1;

'Programming > Spring' 카테고리의 다른 글

ModelAndView 와 ViewResolver  (0) 2018.02.14
파일 업로드/ 다운로드  (0) 2018.02.09
DAO, DTO, VO  (0) 2018.02.08
@Autowired, @Resource, @Inject  (0) 2018.02.05
Filter, Interceptor, AOP  (0) 2018.02.05

DAO


웹서버는 DB와 연결하기 위해서 매번 커넥션 객체를 생성하는데, 이것을 해결하기 위해 나온것이 컨넥션 풀입니다. ConnectionPool 이란 connection 객체를 미리 만들어 놓고 그것을 가져다 쓰는것입니다. 또 다쓰고 난 후에는 반환해 놓는 것. 하지만 유저 한명이 접속해서 한번에 하나의 커넥션만 일으키지 않고 게시판 하나만 봐도 목록볼때 한번, 글읽을때마다 한번, 글쓸때 한번 등등… 엄청나게 많은 커넥션이 일어나기에, 커넥션풀은 커넥션을 또 만드는 오버헤드를 효율적으로 하기 위해 DB에 접속하는 객체를 전용으로 하나만 만들고, 모든 페이지에서 그 객체를 호출해다 사용한다면? 이렇게 커넥션을 하나만 가져오고 그 커넥션을 가져온 객체가 모든 DB와의 연결을 하는것이 바로 DAO 객체입니다

DAO(Data Access Object)는 DB를 사용해 데이터를 조화하거나 조작하는 기능을 전담하도록 만든 오브젝트를 말한다.

사용자는 자신이 필요한 Interface를 DAO에게 던지고 DAO는 이 인터페이스를 구현한 객체를 사용자에게 편리하게 사용 할 수 있도록 반환해줍니다.

DB에 대한 접근을 DAO가 담당하도록 하여 데이터베이스 엑세스를 DAO에서만 하게 되면 다수의 원격호출을 통한 오버헤드를 VO나 DTO를 통해 줄일 수 있고 다수의 DB 호출문제를 해결할 수 있습니다. 또한 단순히 읽기만 하는 연산이므로 트랜잭션 간의 오버헤드를 감소할 수 있습니다.


DTO(=VO)

DTO(Data Transfer Object)는 VO(Value Object)로 바꿔 말할 수 있는데 계층간 데이터 교환을 위한 자바 빈즈를 말합니다.

여기서 말하는 계층간의 Controller, View, Business Layer, Persistent Layer를 말하며 각 계층간 데이터 교환을 위한 객체를 DTO 또는 VO라고 부릅니다 그런데 VO는 DTO와 동일한 개념이지만 read only 속성을 가짐

일반적인 DTO는 로직을 갖고 있지 않는 순수한 데이터 객체이며 속성과 그 속성에 접근하기 위한 getter, setter 메소드만 가진 클래스를 말합니다




출처 : https://jungwoon.github.io/common%20sense/2017/11/16/DAO-VO-DTO/

'Programming > Spring' 카테고리의 다른 글

ModelAndView 와 ViewResolver  (0) 2018.02.14
파일 업로드/ 다운로드  (0) 2018.02.09
MariaDB Auto_Increment  (0) 2018.02.08
@Autowired, @Resource, @Inject  (0) 2018.02.05
Filter, Interceptor, AOP  (0) 2018.02.05

이번에 소개하는 세가지 어노테이션 @Autowired, @Resource,@Inject은 모두 의존관계를 자동으로 연결해주는 기능을 가진 어노테이션입니다. 다만 조금씩의 차이가 있습니다. 

 

 

 @Autowired

 @Inject

@Resource 

 범용

스프링 전용

자바에서 지원 

자바에서 지원

 연결방식

타입에 맞춰서 연결 

타입에 맞춰서 연결 

이름으로 연결

 

 자세한 설명을 하자면, @Inject와 @Resource는 JSR에 실려있는 자바 기존의 어노테이션입니다. 반면 @Autowired의 경우에는 스프링에서 등장한 어노테이션입니다. 따라서 스프링 이외에서는 사용 할 수 없습니다. 만약에 프로젝트를 스프링에서 다른 프레임워크로 바꿀 생각이 있으시다면 @Autowired보단 @Inject나 @Resource를 쓰시면 됩니다. 다만 이런 경우는 거의 없다고 봅니다.

 

또한 연결 방식은 @Autowired와 @Inject는 타입에 맞춰서 하는 반면, @Resource는 이름에 맞춰서 연결하게 됩니다. 예를 들어보겠습니다.

 

Bird 인터페이스를 상속하는 Chicken과 Penguin 이라는 클래스가 있다고 합시다. 

Chicken과 Penguin 클래스를 연결할 것이므로 @Component로 빈에 등록해주었습니다.

public class Bird{}

@Component

public class Chicken implements Bird{}

@Component

public class Penguin implements Bird{}

 

  

그리고 다음과 같이 연결해봅시다.

@Autowired

private Chicken penguin;  //Chicken 타입으로 연결됩니다.

 

@Inject

private Penguin chicken; //Penguin 타입으로 연결됩니다.

@Resource

private Chicken penguin;  //penguin 타입으로 연결됩니다만, Chicken 클래스를 자료형으로 두었기에 캐스팅이 되지 않아 에러가 납니다

 

@Resource

private Bird penguin;      //penguin 타입으로 연결되어 호출해보면 penguin 클래스의 값을 호출하는 것을 볼 수 있습니다.


@Autowired와 @Inject의 경우에도 @Qualifier 어노테이션을 사용하면, 타입 이외의 방법으로도 연결 할 수 있습니다.

(찾은 같은 타입의 빈객체 중에서 이름이(@Qualifier = Name) 같은 것으로 연결)

@Autowired

@Qualifier("chicken")

pirvate Brid penguin;

Bird타입의 빈객체중 chicken이라는 이름을 가진 빈 객체와 연결해서 맵핑




'Programming > Spring' 카테고리의 다른 글

ModelAndView 와 ViewResolver  (0) 2018.02.14
파일 업로드/ 다운로드  (0) 2018.02.09
MariaDB Auto_Increment  (0) 2018.02.08
DAO, DTO, VO  (0) 2018.02.08
Filter, Interceptor, AOP  (0) 2018.02.05

Filter,Interceptor,AOP 모두 요청 중간에 가로채서 사전처리,사후처리를 하는 의미는 비슷하다.

로깅처리 또한 셋다 가능.

차이점이라고 하면 ,


1. 셋의 시점이 다르다는것

: Filter > Interceptor > AOP


2. 적용하는 방식이 다름

: Filter : web.xml ,

  Interceptor : servlet-context.xml




###Filter


클라이언트 요청정보를 제공하는 객체를 정의 : ServletRequest 객체

서블릿 컨테이너는 ServletRequest 객체를 생성하고 이를 서블릿의 Service 메소드에 인수로 전달한다.

ServletRequest 객체는 매개 변수 이름과 값, 속성 및 입력 스트림을 포함하는 데이터를 제공한다.


-클라이언트 요청 정보를 제공하는 객체를 정의

-IP, hostname, 프로토콜 형식, 서버이름, 포트번호, ContentType 등을 가져올 수 있다.

-일반적인 네트워크 통신 기반에 의해서 사용되는 것들

-Servlet 의 web.xml에서 정의

-요청과 응답을 함께 다룰 수 있다.

-doFilter 메소드의 chain.doFilter(request,response) 를 기점으로 전/후 처리가능



###Interceptor





ServletRequest 인터페이스를 확장하여 HTTP 서블릿에 대한 요청 정보를 제공한다.

즉 , ServletRequest의 자식 Interface가 HttpServletRequest이다.

서블릿 컨테이너는 HttpServletRequest 객체를 생성하고 이를 서블릿의 서비스 메소드 (doGet, doPost등)에 인수로 전달


-public interface HttpServletRequest extends ServletRequest

-Http 프로토콜에 존재하는 정보들

-요청 파라미터, HTTP 헤더, 세션 및 쿠키 데이터, 요청에 사용된 URL 등을 가져올 수 있다.

-Spring에서 실행될 컨트롤러 빈 오브젝트, 컨트롤러가 돌려주는 ModelAndView, 발생한 예외 등을 제공받을수 있음.

-servlet-context.xml에 정의




### Filter : 
  - init() : 필터 초기화
  - doFilter() : 전, 후처리용 메소드, 내부에서 filterChain.doFilter를 호출하여 해당 비즈니스처리를 계속해서 수행할 수 있다.
  - destory() : 필터 종료이후 실행.



### Interceptor : 
  - preHandle() : 핸들러가 수행되기 전에 실행됨.
  - postHandle() : 핸들러가 수행되고 나서 실행됨.
  - afterCompletion() : View작업까지 완료되고 나서 실행됨.



### 파라미터의 차이
- Filter는 ServletRequest, ServletResponse등을 받게 된다.
- Interceptor은 HttpServletRequest, HttpServletResponse, 그리고 대상핸들러 등을 받아서 처리할 수 있다.

### ServletRequest와 HttpServletRequest의 차이.


SERVLETREQUESTHTTPSERVLETREQUEST
javax.servlet패키지에 포함됨. javax.servlet.http 패키지에 포함됨. 

ServletRequest의 하위 인터페이스임
getParameter()와 같은 많은 메소드를 제공 ServletRequest의 다양한 메소드를 상속받음.
getQueryString()등과 같은 추가 메소드를 제공함
HTTP프로토콜의 헤더, 바디, 컨텐츠타입, 쿠키, 세션등  다양한 정보를 쉽게 사용할 수 있도록함. 
GenericServlet과 함께 사용됨. HttpServlet과 함께 사용됨. 
프로토콜에 독립적으로 사용가능 프로토콜에 독립적이나, HTTP프로토콜 에 특화되어 사용 
HTTP가 사용되지 않았을때 클라이언트에서 요청이 들어오면 web container는 servletRequest 객체를 생성하고 service()메소드로 전달하는 방식으로 운용되었다. 클라이언트에서 요청이 HTTP프로토콜을 이용하여 들어온경우 Web container는 HttpServletRequest 객체를 생성하고 service()메소드에 전달하여 사용한다.


### AOP


AOP의 여러가지 기능들을 이용하여 메소드가 시행되기 전, 후 등에 처리

: 개념이나 사용법에 대해선 http://hayunstudy.tistory.com/49 참고


### 결론


세군데 전부 로깅이 가능하지만, AOP에 하는 것이 가장 적절하다고 판단.

Filter에 하면 모든 로깅이 다 체크되므로 비효율적이고 시스템에 부하가 걸릴수있다.

Interceptor에 로깅한다면 적당한 controller 및 ModelAndView 예외처리에 다 로깅 가능하다.

하지만 비지니스업무상 insert 또는 update 하는부분에만 로깅하고싶다거나 특정 에러처리 부분만 로깅할때 즉 세밀한 로깅처리불가

AOP 에서 로깅 처리를 하면 개발자가 원하는 시점에 로깅처리가 가능하기때문에 적절.


*Filter

-전체적인 Request단에서 어떤 처리가 필요할때

-인증, 이미지변환, 데이터압축, 암호화필터, 토크나이징 필터,

  XML 컨텐츠를 변형하는 XSLT 필터,

  URL 및 기타정보를 캐시하는 필터

-문자 인코딩


*Interceptor

-세션 및 쿠키 체크하는 http 프로토콜 단위로 처리해야 하는 업무가 있을 때

-로그인 세션 체크, 업로드파일처리


*AOP

-비즈니스 단에서 세밀하게 조정하고 싶을때

-로깅, 트랜잭션, 예외처리, 권한체크




구분 Filter Interceptor AOP
실행 위치 서블릿 서블릿 메서드
실행 순서 1 2 3
설정 위치 web.xml xml or java xml or java
실행 메서드 init(), doFilter(), destroy() preHandler(), postHanler(), afterCompletion() 포인트 컷으로 @After, @Before, @Around 위치를 지정




출처 :

http://blog.naver.com/PostView.nhn?blogId=fortunerain&logNo=220964510870&parentCategoryNo=&categoryNo=69&viewDate=&isShowPopularPosts=true&from=search


https://uncle-bae.blogspot.kr/2016/05/spring-interceptor-and-filter.html


'Programming > Spring' 카테고리의 다른 글

ModelAndView 와 ViewResolver  (0) 2018.02.14
파일 업로드/ 다운로드  (0) 2018.02.09
MariaDB Auto_Increment  (0) 2018.02.08
DAO, DTO, VO  (0) 2018.02.08
@Autowired, @Resource, @Inject  (0) 2018.02.05

감가상각

최근 수정 시각:

減價償却, Depreciation
취득한 자산의 원가를 기간별로 배분하는 과정

자주 오해하는 회계학 관련 용어. 가치의 감소를 의미하는 것이 절대 아님

1. 개념2. 감가상각의 방법
2.1. 관련 용어
2.1.1. 정액법2.1.2. 정률법2.1.3. 이중체감법2.1.4. 생산량비례법2.1.5. 연수합계법

1. 개념[편집]

발생주의 회계처리를 위해 사용되는 개념으로 비용을 지출해서 구입한 후 장기간 사용하는 자산의 비용화에 관련된 문제이다. 자산으로부터 창출되는 효익과 자산을 구입하는데 들어간 비용을 일치시키는 과정. 즉 수익-비용의 대응이 감가상각의 본질이다. 감가상각을 구하기 위해서는 3요소인 감가상각방법, 감가상각대상금액, 내용연수를 알아야 한다.

대부분의 사람들, 심지어 언론사(경제지 포함) 기자마저 자주 하는 오해는 감가상각이 단순히 가치감소를 자산에 반영하는 과정으로 이해하는 것이다. 경제학에서는 통상적으로 물건을 사용하다 보면 물건의 가치(공정가치 or 시장가치)가 감소하며 이를 감가상각이라 가정하지만 이는 회계학에서 정의하는 엄밀한 감가상각의 개념과는 완전히 다른 단순한 가정임에 주의해야 한다. 책에 따라서는 오해가 없도록 명확한 감가상각의 정의를 소개한 뒤에 기업의 감가상각은 가치감소율과 같다고 가정한다는 언급을 하기도 하지만 이를 굳이 언급하지 않는 경제학 관련 서적도 많다.

물론 기업회계 기준에서는 자산에 내재된 미래 경제적 효익의 예상 소비행태를 반영하는 방법으로 감가상각을 하도록 규정하고 있으므로 기업이 이를 잘 준수하며 예외적인 상황이 발생하지 않는다면 경제학에서의 감가상각에 대한 가정을 끌어와 수치를 구해도 재무제표상의 감가상각과 큰 차이가 없지만 기업회계에서의 가치감소는 감가상각만이 아니라 평가손실, 감모손실 등 여러가지로 세분화되기 때문에 말 그대로 비슷할 뿐이다. 경제학에서의 가정은 정책의사 결정과 같은 거시적 분석의 편의를 위한 매우 단순화한 정의이며, 법인세나 처분비용, 현금흐름, 할인율 등 다양한 미시적 변수를 고려해야하는 경영학이나 회계학에서는 훨씬 엄밀한 정의를 하고 있다. 따라서 경영학 수업이나 기업면접에서는 반드시 회계학적인 엄밀한 정의를 내리는 것이 정답이며 가치감소는 감가상각이라기보다는 분석의 편의를 위한 하나의 가정에 가까움을 명심해야 한다. 간단한 예로 집값이 천정부지로 치솟는 투기지역의 아파트를 보유했을 경우에도 감가상각은 계속 진행된다.

신품으로 물건을 구입 후 중고로 내다 팔 때 가격을 깎아서 팔아야 하는 현상은 오히려 손상차손이나 재평가가 가까울 것이다.[1] 감가상각을 정확하게 이해하기 위해서는 그 바탕에 수익과 비용간의 대응이란 개념이 깔려있는데 이해하기 쉬운 예를 들어보도록 하겠다.

온라인 게임을 10만원에 결제하면 그 사람은 10만원의 지출로 그 요금이 만료될 때까지 지속적인 즐거움을 느끼게 된다(이 사람이 폐인이라 매일 10시간씩 게임을 2년간 플레이한다고 가정하자.).가정을 해도 왜 그렇게

게임을 플레이해서 얻는 즐거움은 2년간 지속되는데 10만원이란 비용이 처음 지출시점에 한번에 나가버리면 플레이어가 얻는 즐거움은 2년간 지속되는데 그것을 위해 지출한 비용은 처음 시점에 한번에 나가버리고 없어지므로 서로간에 대응이 되지 않게 된다. 즉 2년간 아무런 비용도 내지 않고 즐거움만 얻는 꼴이 되어버리는 것.

게임을 즐기는 동안 그 비율에 맞춰 비용도 같은 비율로 나가는 것이 가장 논리적이다. 이를 위해 처음 10만원을 자산(게임을 이용할 수 있는 권리)으로 일단 인식하고 이 자산을 깎아나가면서 그 부분만큼 비용으로 바꿔준다면 얻는 즐거움과 소모한 비용을 일치시킬 수 있게 된다.

게임을 그러나 앞으로 언제 얼마큼 즐길지, 즉 자산이 가져다주는 수익의 미래 발생행태를 정확히 예상할 수 없기 때문에 이러한 방법도 정확히 수익과 비용을 대응시킨다고 할 수는 없다. 따라서 그 자산의 사용 형태에 따라 가장 합리적인 방법을 사용해 미래의 수익을 추정한다는 가정이 기본적으로 깔리게 된다.

2. 감가상각의 방법[편집]

2.1. 관련 용어[편집]

  • 감가상각비(D): 말 그대로 감가상각비. 기간 별로 배분된 당기비용으로 포괄손익계산서항목이다.

  • 감가상각누계액: 해당 자산의 취득시점부터 현재까지 인식한 감가상각비의 총액. 재무상태표에 자산의 차감 항목으로 표시된다. 즉, 감가상각누계액이 존재 할 경우 장부가는 취득원가에서 감가상각누계액을 차감한 금액이 된다.

  • 감가상각대상금액: 자산을 이용하는 기간 즉, 내용연수에 걸쳐 배분할 총비용. 자산의 취득원가에서 잔존가치를 차감한 금액.

  • 내용연수(n): 감가상각을 배분할 총 기간. 국제회계기준에서는 내용연수를 결정할 때 다음의 요소를 모두 고려할 것을 요구하고 있다.

    • 자산의 예상생산능력이나 물리적 생산량을 토대로 한 자산의 예상사용수준

    • 자산을 교대로 사용하는 빈도, 수선・유지계획과 운휴 중 유지・보수 등과 같은 가동요소를 고려한 자산의 예상 물리적 마모나 손상

    • 생산방법의 변화, 개선 또는 해당 자산에서 생산되는 제품 및 용역에 대한 시장수요의 변화로 인한 기술적 또는 상업적 진부화

    • 리스계약의 만료일 등 자산의 사용에 대한 법적 또는 이와 유사한 제한[2]

  • 취득원가(Co C_o : Original Cost): 회계적 취득원가. 자산의 매입대가로 지불한 금액과 기타 취득부대비용의 합.

  • 잔존가치(Vs V_s : Salvage Value): 내용연수동안 감가상각을 하고난 뒤 남을 것으로 예상하는 자산의 가치.

  • 감가상각부인액: 세법에서 사업자가 특정 사업년도에 일부러 감가상각비를 과대계상하여 소득금액을 조작하는 것을 방지하기 위해 감가상각비의 상한선을 정해 놓고 있는데 그 상한액을 초과하는 경우 초과금액은 감가상각비로 인정받지 못한다. 이를 감가상각부인액이라고 한다.

2.1.1. 정액법[편집]

내용연수에 걸쳐 매 기간 일정하게 감가상각비를 인식하는 방법. 실무적으로도 가장 많이 쓰인다.

D=CoVsn\displaystyle D = \frac{ C_o - V_s }{n}

2.1.2. 정률법[편집]

내용연수 동안 감가상각비가 매 기간 감소하는 방법. 매 기간 자산의 기초장부금액에 일정한 정률법을 곱하여 감가상각비를 구한다. 정액법과 더불어 실무적으로 가장 많이 쓰이는 방법이다.

참고로 감가상각률(RDR_D )은 법인세법 시행규칙으로 기획재정부에서 상각률표를 공시한다. 2~60기간의 정액법과 정률법의 상각률을 소숫점 4째자리에서 올림하여 계산하여 제공한다. 실무적으로는 모두 이 표의 상각률을 이용한다. 다운로드

  • VbV_b : 기초자산 장부가액(Book Value at Beginning of Year)

  • D=RD(CoVb) D = R_D\left(C_o - V_b \right)

  • RD=1VsCon R_D = 1-\sqrt[n]{\frac{Vs}{Co}}

2.1.3. 이중체감법[편집]

정률법의 간편법으로 개발된 방식. 따라서 큰 틀에서의 계산 산식은 정률법과 동일하다. 다만, 정률법에 의한 상각률의 산정이 너무 복잡하므로 이중체감법에서는 상각률 RD=2n R_D = \frac{2}{n} 를 이용한다.

D=2n(CoVs) D = \frac{2}{n}(C_o - V_s)

상각률 산정에 있어서 간편하다는 장점이 있으나, 내용연수가 종료되는 회계연도에 잔존가치만 남도록 감가상각비를 역산해야 되는 문제점이 있다.

2.1.4. 생산량비례법[3][편집]

실제생산량에 비례하여 감가상각비를 인식하는 방법. 자산을 사용하면서 생산된 제품 등의 생산량에 감가상각비를 비례적으로 인식하는 방법으로 자산을 사용한 만큼 감가상각을 인식한다는 개념이다.

여기서 생산량은 최종 제품의 생산량 뿐만 아니라 제품을 사용함으로써 도출되는 산출물의 개념으로 이해하면 된다. 예를 들어 제품 생산라인의 기계장치라면 실제 제품생산량에 비례하면 될 것이고, 차량운반구라면 차량의 운행시간에 비례할 수 있다. 쓰레기 매립지라면 매립량에 비례하여 감가상각비를 인식하면 될 것이다. 하지만 이러한 귀찮은 점 때문에 생산량비례법은 실무적으로 잘 쓰이지 않을 뿐더러 쓴다 하더라도 대부분 제품 생산량에 퉁쳐서 계산한다.

D=(CoVs)PunitPtotal D = (C_o - V_s) \frac{P_{unit}}{P_{total}}

  • Punit P_{unit} : 당기실제생산량(Units Produced of during the Year)

  • Ptotal P_{total} : 총추정생산량(Total Units of Production)

2.1.5. 연수합계법[편집]

정률법과 비슷하게 매 기간 감가상각비가 체감하는 방법.
연수합계법은 정률법과 다르게 감가상각률 자체가 매 기간 낮아진다.

D=RD(CoVs) D = R_D(C_o - V_s) (단, 감가상각률 RD=N1+2+3+...+nR_D = \frac{N}{1+2+3+...+n} )

여기서 N은 남은 내용연수를 뜻한다. 예를 들어 내용연수가 5년일 경우 1차년도 상각률은 55+4+3+2+1\frac{5}{5+4+3+2+1} , 2차년도 상각률은 45+4+3+2+1\frac{4}{5+4+3+2+1} 등으로 계산한다. 매년 분자에서 1을 빼주면 된다.

실무적으로 연수합계법은 거의 쓰이지 않는다. 이는 법인세법에서 인정하는 감가상각 방법은 정액법, 정률법, 생산량비례법 뿐이기 때문.


'회계' 카테고리의 다른 글

자산  (0) 2017.11.23
재무상태표  (0) 2017.11.23
용어정리  (0) 2017.11.23

자산

Asset

1. 정의
2. 예시

3. 인식

 3.1. 부채 증가를 동반
 3.2. 자본 증가를 동반
 3.3. 수익 발생을 동반
4. 직관적 이해
5. 관련항목

1. 정의[편집]

과거 거래의 결과로 기업이 현재 통제하고 있으며 미래의 효익 유입이 예상되는 현재의 권리를 의미한다. 자산은 그 공정가치가 신뢰성 있게 측정될 수 있을 때 인식한다. 자세한 분류는 재무상태표 참조.

2. 예시[편집]

정의가 '효익 유입'이니 '권리'니 어려운 말로 도배되어 있지만 실상은 그냥 '돈 되는 것'이라 생각해도 별 상관은 없다.

범주

비고

현금

상품

팔아서 돈을 벌 목적으로 사와서 가지고 있는 물건.

제품

팔아서 돈을 벌 목적으로 만들어서 가지고 있는 물건.

매출채권

물건을 팔고 돈을 아직 받지 못했을 때 가진 권리. 즉 '물건값 받을 권리'로서, 이 권리로 인해 돈이 들어오게 되므로 자산의 정의를 충족한다.

유형자산

사용하여 돈을 벌 목적으로 가지고 있는 물건 중 유형인 것. 기계, 자동차 등이 있다.

무형자산

형태가 없는 자산 중 일부 조건을 충족한 것들로, 특허권 등이 있다.


이 외에도 엄청 많다. 이 중 현금은 즉시 사용할 수 있고 언제든지 다른 가치로 전환이 가능한 유동 자산, 또는 동산으로 취급되며, 이 유동성이 자산 가치의 매우 중요한 요소이다. 다른 가치로 즉시 전환이 되지 않는 토지같은 자산은 움직이지 않는다고 해서 부동 자산, 줄여서 부동산이라고 한다. 일반적으로 부동산 = 땅이라고 생각하는 사람이 많으나 이는 땅이 부동산의 대표적인 것이다보니 민법, 상법상 그렇게 규정한 것이다.

3. 인식[편집]

앞서 말했듯 자산은

  1. 과거 거래의 결과로

  2. 현재 가지고 있는

  3. 미래 경제적 효익의 유입가능성이 높은 권리이다.

이때 이 자산의 공정가치를 신뢰성 있게 측정할 수 있다면 자산을 인식하는데, 복식부기의 원리에 의하여 자산을 인식하기 위해 차변에 자산을 기록하면 대변에 반드시 무언가를 기록해야 한다. 이때 대변에 무엇을 기록하는지는, 차변에 기록한 자산을 얻기 위해 무엇을 하였는가 정도의 의미로 생각하면 된다.

3.1. 부채 증가를 동반[편집]

대표적인 예로는 차입이 있다. 차입은 돈을 꾸는 것을 의미한다. 예를 들어 (주)연세가 (주)고려로부터 10,000원을 차입했다면, 복식부기 원리에 의하여 (주)연세가 해야 할 분개는 다음과 같다.

(차) 현금 10,000 (대) 차입금 10,000


이때 대변에 기록한 '차입금'은, 언젠가 10,000원을 갚아야 하는 법적 의무이다. 즉 미래에 돈이 나갈 의무이므로, 부채이다.

3.2. 자본 증가를 동반[편집]

대표적인 예로 출자를 받는 것이 있다. 출자를 받았다는 것은, 주식을 주고 돈이나 기타 자산을 받음을 의미한다. 예를 들어 (주)서강의 창립을 위하여 두 사람 A,B가 각각 50만 원씩 투자를 했다고 하자. 그러면 A와 B는 (주)서강에 투자한 사람, 즉 주주가 된다. 이때 주주가 되었다는 표시로 A,B가 받는 것이 주식이다.

액면가 1,000원의 주식을 가정하면, A와 B는 각자 주식 500장씩을 받게 된다.

이를 (주)서강의 입장에서 다시 생각해보면, (주)서강의 주식 1,000장을 팔아 100만 원을 받은 것이다. 이때 차입과 다른 점은 주식을 팔아 받은 돈은 미래에 갚아야 하는 것이 아니라, 오롯이 (주)서강의 것이 된다는 것이다.

(주)서강 입장에서의 분개는 다음과 같다.

(차) 현금 1,000,000 (대) 자본금 1,000,000


이때 (주)서강이 얻게 된 100만 원의 출처는 바로 주주의 투자라는 것을 표시하기 위해 대변에 자본금을 기록한다.

자본금은 투자 원금을 의미하며, 부채에 영향을 주지 않고 자산을 늘리므로, 그 정의상 자본에 속하게 된다.[1]

3.3. 수익 발생을 동반[편집]

예를 들어 돈 500원을 벌었다고 해 보자. 현금을 회수한 경우 분개는 다음과 같다.

(차) 현금 500 (대) 수익 500


수익 역시 부채가 증가하지 않았는데 자산의 증가를 유발하므로 자본에 속한다. 그런데 수익과 비용은 자본에 속하긴 하지만 기업활동의 성과를 나타내는 포괄손익계산서의 중요한 두 항목이므로, 출자에 의하여 생기는 자본금 등과는 구별하는 것이 보통이다.

물론 회계연도말에 마감분개로서 수익은 이익잉여금이라는 자본계정에 합쳐지게 되므로 궁극적으로는 자본에 귀속되는 것이 맞다.

4. 직관적 이해[편집]

'지금 손에 든 것'이라 할 수 있다. 예를 들어, 갑돌이가 현금 10,000원을 들고 있다면, 이는 갑돌이의 자산이다. 갑돌이가 현금 10,000원을 들고 있다면 다음 두 가지 경우 모두 이것이 자산이라는 사실에는 변함이 없다.

분류

비고

부채

누군가에게 빌림

자본

투자를 받거나 직접 일해서 벎


'회계' 카테고리의 다른 글

감가상각  (0) 2017.11.23
재무상태표  (0) 2017.11.23
용어정리  (0) 2017.11.23

재무상태표

최근 수정 시각:


財務狀態表 / Statement of Financial Position
대차대조표(貸借對照表) / Balance Sheet

1. 개요
2. 재무상태표 계정분류
 2.1. 자산(차)
  2.1.1. 유동자산
  2.1.2. 비유동자산(≓ 고정자산)
 2.2. 부채(대)
  2.2.1. 유동부채
  2.2.2. 비유동부채
 2.3. 자본(대, = 순자산)

1. 개요[편집]

기본 재무제표의 하나. 매일경제신문, 한국경제신문, 서울경제신문 등에 나오는 결산공고의 형태도 이 재무상태표(대차대조표)이다. 특정 시점기업의 재무상태를 알 수 있게 나타낸 기본 재무제표로, 일반적으로는 회계결산일(12월 결산법인 : 12월 31일, 3월 결산법인 : 3월 31일, 6월 결산법인 : 6월 30일, 9월 결산법인 : 9월 30일)을 기준으로 한다. 하지만, 주식시장에 상장된 기업이나, 비상장기업이라도 필요에 따라서는 분기(3개월마다)나 반기(6개월마다)마다 재무상태표를 만드는 곳도 있다.

원래는 대차대조표라고 불렀는데, 국제회계기준(IFRS)에서 재무상태표라는 이름으로 바꿨다. 비상장회사 등 국제회계기준 미적용법인들에 적용되는 일반기업회계기준에서의 명칭도 재무상태표로 변경되었다. 하지만, 일반인들에게는 아직 대차대조표라는 이름이 더 통용되는 편.[1] 실무현장에서는 B/S[2]로 축약시켜 부르는 경우가 상당히 많다.

재무상태표 왼편(차변, 借邊)에는 기업자산이, 오른편(대변, 貸邊)에는 부채자본(순자산)이 표시되어 있다. 회계등식에 의해 자산 = 부채 + 자본이 항상 성립해야 한다.

재무상태표는 정태적 재무제표라고도 한다. 즉, 일정 시점의 기업의 상태를 나타내는 것이다. 반대로 손익계산서는 일정 기간의 손익, 즉 변화량을 나타낸다는 점에 있어서 재무상태표와 다르다.
부채와 자본을 나타내는 재무상태표의 대변은 기업을 구성하고 있는 자금의 출처를 나타낸다. 단순하게 얘기하면 부채는 채권자들로부터 얼마를 어떻게 빌려왔는지를 보여주고, 자본은 주주로부터 얼마를 어떻게 투자받았는지를 보여준다. 그리고 자산을 나타내는 차변은 주주와 채권자로부터 받아온 돈을 어디에, 얼마를 썼는지를 보여준다. 이러한 방식으로 재무상태표는 기업의 '재무상태'를 보여주는 것이다.
흔히 투자지표로 얘기하는 부채비율이나 자기자본비율, 유동비율 등이 재무상태표를 이용하여 계산된다.

2. 재무상태표 계정분류[편집]

현금과 그 등가물을 제외한 자산과 부채를 막론하고 '유동' 항목에는 만기 1년 이하의 것 또는 당해년도 중에 만기가 도래하는 것을, '비유동' 항목에는 만기 1년 초과의 것 또는 당해년도에 만기가 도래하지 않는 것을 계상한다.

2.1. 자산(차)[편집]

2.1.1. 유동자산[편집]

  • 당좌자산

    • 현금및현금성자산(= 현금및현금등가물)

    • 단기매매금융자산(주식, 채권, 파생상품)

    • 수취채권[3]

      • 외상매출금

        • 대손충당금

      • 받을어음

        • 대손충당금

    • 계약자산

    • 단기대여금[4]

      • 대손충당금

    • 선급비용

    • 선급금[5]

    • 미수금[6]

      • 대손충당금

    • 미수수익

  • 재고자산

    • 상품[7]

    • 제품

    • 원재료

    • 반제품

    • 재공품

    • 저장품

  • 기타

2.1.2. 비유동자산(≓ 고정자산)[편집]

  • 투자자산

  • 유형자산[8]

    • 토지[9]

    • 설비자산

      • 건물

        • 감가상각누계액[10]

      • 기계장치

        • 감가상각누계액

    • 비품

      • 감가상각누계액

    • 차량운반구

      • 감가상각누계액

    • 건설중인자산

  • 무형자산

    • 영업권(정식명칭이 영업권이고, 흔히 권리금(프리미엄)이라 부른다.)

    • 개발비

    • 산업재산권

    • 기타무형자산

  • 기타비유동자산

    • 이연법인세자산

    • 기타

      • 임차보증금

      • 장기선급비용

      • 장기선급금

      • 장기매출채권

      • 장기미수금

2.2. 부채(대)[편집]

2.2.1. 유동부채[편집]

  • 단기차입금[11]

  • 매입채무

  • 미지급법인세

  • 선수수익

  • 선수금[12]

  • 미지급금[13]

  • 예수금[14]

  • 미지급비용

  • 만기가 12개월 이내인 장기차입금. 이를 유동성장기차입금이라고 한다.

2.2.2. 비유동부채[편집]

2.3. 자본(대, = 순자산)[편집]

  • 자본금

  • 자본잉여금

  • 자본조정

    • 자기주식(통칭 자사주[18])

    • 주식할인발행차금

    • 감자차손[19]

    • 자기주식처분손실

    • 배당건설이자

    • 미교부주식배당금

    • 신주청약증거금

  • 기타포괄손익누계액

    • 매도가능금융자산평가차익

    • 유형재산재평가차익누계액

    • 해외사업환산손익

  • 이익잉여금(배당은 여기에서 할 수 있다) (만약 적자가 누적되면 결손금이 된다.)

    • 법정적립금

      • 이익준비금[20]

      • 기타 법정적립금[21]

        • 재무구조개선적립금

    • 임의적립금

    • 미처분이익잉여금








대차대조표는 '특정시점의 재무상태를 나타내는 표'이며 영어로는 B/S(balance sheet)라고 말한다. 재무상태란 회계용어로 자산, 부채, 자본의 보유상태를 의미한다. 특정시점이란 대차대조표를 작성하는 시점으로 일반적으로 회계연도 종료일(결산일)이 기준이 된다(물론 사업개시일, 매월 말, 분기 말, 반기마다 어떤 시점도 대차대조표를 작성하는 기준일이 될 수 있다).

 

여기서 대차대조표를 통해 매우 중요한 회계용어인 자산, 부채, 자본에 대한 기본적인 이해와 개념을 가져야 한다.
 
자산이란 기업이 보유 중인 재산적 가치가 있는 경제적 자원으로 물건과 권리라고 이해하면 된다. 회계에서 말하는 자산에는 어떠한 것이 있을까? 일반인들이 생각하는 재산과 비슷한 것을 떠올리면 된다. 자산에는 현금과 예금, 매출채권(외상으로 상품을 팔고 나중에 현금을 받기로 한 권리), 유가증권, 건물, 토지 등이 있다.
 
부채란 타인에게 부담할 일정한 금액의 의무 즉 갚아야 할 ‘빚’이라고 이해하면 된다. 여기에는 차입금, 매입채무(외상으로 상품을 구입하고 대금은 나중에 지급하기로 한 의무) 등이 있다. 


자본은 기업의 소유주(주식회사의 경우에는 주주)가 납입한 자본금과 기업의 경영활동의 결과 얻어진 잉여금을 의미한다. 실제로 자산에서 부채를 차감한 금액과 같으므로 순자산이라고 흔히 부른다.
 
여기에서 대차대조표를 살펴 보면 관찰력이 예리한 독자는 매우 중요한 사실을 발견하였을 것이다. 즉 자산, 부채, 자본 사이에는 다음과 같은 일정한 관계가 성립한다는 것이다. 


이러한 관계식은 회계를 공부하는데 가장 기본적인 등식으로 '회계등식' 또는 '대차대조표등식'이라고 부른다. 여기서 매우 중요한 사실은 대차대조표의 구조를 통해 알 수 있는 것처럼 경영활동을 통하여 자산, 부채, 자본에 변화가 계속 발생하지만 회계등식 또는 대차대조표 등식은 항상 성립한다는 점이다. 회계여행을 하면서 어려운 상황에서도 항상 마음 속에 회계등식을 떠올린다면 회계는 쉽게 정복될 수 있을 것이다.
 
대차대조표를 통해 회계등식의 의미를 좀 더 생각해 보자. 앞에서 회계란 돈의 흐름을 기록하는 과정이라고 하였다. 돈의 흐름은 조달과 운용으로 구분할 수 있다. 우선 돈을 조달하는 방법에는 타인으로 부터 조달할 수 있고(부채), 자기 돈(자본)일 수도 있다. 돈의 운용이란 조달한 돈을 기업이 이익을 얻기 위해 필요한 경제적 자원인 자산에 투자하는 것이다. 따라서, 회계등식인 ‘자산=부채+자본’이 의미하는 것은 돈의 조달(부채와 자본)과 돈의 운용(자산)은 항상 일치한다는 점이다. 대차대조표는 기업에 대한 이러한 사실을 특정 시점에서 한편의 스냅사진처럼 종합적으로 보여주고 있다. <머니투데이> 




출처 : 나무위키

        http://mnews.joins.com/article/2944677#home

'회계' 카테고리의 다른 글

감가상각  (0) 2017.11.23
자산  (0) 2017.11.23
용어정리  (0) 2017.11.23

+ Recent posts